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 から呼び出された場合にのみトランザクションがロールバックされるのを回避する方法はありますか?
それ以外の場合、私の最善の選択肢は、新しいトランザクション内で失敗を永続化することだと思いますか? 他にできることはありますか?