Я использую Spring 2.5 для управления транзакциями и имею следующую настройку:
Bean1
@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, потому что вся транзакция откатывается.
Я не хочу добавлять noRollbackFor в Bean2, потому что он используетсяво многих местах, где нет логики для правильной обработки исключений времени выполнения.
Есть ли способ избежать отката моей транзакции только при вызове Bean2.execute () из Bean1?
В противном случае, я думаю, что мой лучший вариант - это сохранить мой сбой в новой транзакции?Что-нибудь еще можно почистить?