Я использую управление транзакциями 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
}
}
Боб2
@Transactional
public void execute() {
// do something which throws a RuntimeException
}
Сбой никогда не сохраняется в БД из Bean1, потому что вся транзакция откатывается.
Я не хочу добавлять noRollbackFor в Bean2, потому что он используется во многих местах, где нет логики для правильной обработки исключений во время выполнения.
Есть ли способ избежать отката моей транзакции только тогда, когда Bean2.execute() вызывается из Bean1?
В противном случае, я думаю, мой лучший вариант - сохранить мою ошибку в новой транзакции? Что-нибудь еще чистое я могу сделать?