Управление настройками внутренней транзакции из внешней транзакции с помощью Spring 2.5
Я использую управление транзакциями в 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?
В противном случае, я думаю, что мой лучший вариант - это сохранить мой провал в новой транзакции? Что-нибудь еще можно почистить?
1 ответ
Это одно из предостережений аннотаций... ваш класс не подлежит повторному использованию!
Если бы вы сконфигурировали свои транзакции в XML, если бы это было возможно.
Предполагая, что вы используете конфигурацию XML: если она не потребляет дорогих ресурсов, вы можете создать другой экземпляр bean2 для использования указанного вами кода. То есть вы можете настроить один такой, как вы указали выше, и один без отката для исключения.