Управление настройками внутренней транзакции из внешней транзакции с помощью Spring 2.5 - PullRequest
4 голосов
/ 02 октября 2010

Я использую 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 Ответ

1 голос
/ 22 октября 2010

Это одно из предостережений аннотаций ... ваш класс нельзя использовать повторно!

Если бы вы сконфигурировали свои транзакции в XML, если бы это было возможно.

Предполагается, что вы используете конфигурацию XML: если она не потребляет дорогих ресурсов, вы можете создать другой экземпляр bean2 для использования указанного вами кода. То есть вы можете настроить один из указанных выше, а другой без отката для исключения.

...