Вложенная весенняя транзакция никогда не откатывается - PullRequest
3 голосов
/ 04 ноября 2011

Я работаю над сервисным уровнем, который регистрирует базу данных при выполнении задач.Я хочу убедиться, что этот журнал не откатывается при возникновении ошибки, так как я всегда должен вести учет неудачных попыток.Ниже приведен пример кода для объяснения того, что я хочу.

@Transactional(rollbackFor=Exception.class)
public void performTask()
{
    //Perform task 1
    log("task1Complete");

    //Perform task 2
    log("task2Complete");
}

@Transactional()
public void log(String message)
{
    //commit message to DB
    //This should never rollback
}

Я предполагаю, что способ сделать это - начать новую транзакцию, но я не уверен, как.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Использование:

@Transactional(propagation = Propagation.REQUIRES_NEW)

Имейте в виду, что вызов метода @Transactional для "this" не откроет транзакцию, если вы используете JDK Proxies или CGIL Proxies. Вместо этого вы должны использовать AspectJ или вызывать его для другого объекта для прохождения через его прокси.

2 голосов
/ 04 ноября 2011

вы хотите использовать:

@Transactional(propagation = Propagation.REQUIRES_NEW)

См .: Распространение

Кроме того, ваш TransactionManager должен быть настроен на разрешение вложенных транзакций .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...