4

Spring 2.5 トランザクション管理を使用しており、次のように設定しています。

ビーン1

@Transactional(noRollbackFor = { Exception.class })
public void execute() {
  try {
    bean2.execute();
  } catch (Exception e) {
    // persist failure in database (so the transaction shouldn't fail)
    // the exception is not re-thrown
  }
}

Bean2

@Transactional
public void execute() {
  // do something which throws a RuntimeException
}

トランザクション全体がロールバックされるため、障害が Bean1 から DB に永続化されることはありません。

ランタイム例外を適切に処理するロジックがない多くの場所で使用されているため、Bean2に noRollbackForを追加したくありません。

Bean2.execute() が Bean1 から呼び出された場合にのみトランザクションがロールバックされるのを回避する方法はありますか?

それ以外の場合、私の最善の選択肢は、新しいトランザクション内で失敗を永続化することだと思いますか? 他にできることはありますか?

4

1 に答える 1

1

これは注釈の警告の 1 つです... クラスは再利用できません!

XML でトランザクションを構成した場合、それが可能でした。

XML 構成を使用すると仮定すると、高価なリソースを消費しない場合は、指定したコードを使用するために bean2 の別のインスタンスを作成できます。つまり、1 つを上記で指定したとおりに構成し、1 つを例外としてロールバックしないように構成できます。

于 2010-10-22T17:35:33.423 に答える