Управление настройками внутренней транзакции из внешней транзакции с помощью 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 для использования указанного вами кода. То есть вы можете настроить один такой, как вы указали выше, и один без отката для исключения.

Другие вопросы по тегам