Spring - транзакция должна фиксироваться в одном методе, но должна откатываться в других методах, которые делают транзакцию БД - PullRequest
0 голосов
/ 13 мая 2019

Как обработать Spring Transaction в Java, где у меня есть сценарий:

Сервисный метод, скажем, methodA () вызывает другой метод - methodB ().Из methodB () я делаю проверку, и если эта проверка становится истинной, я вызову другой methodC (), и этот метод должен быть зафиксирован, тогда как все другие методы должны получить откат, то есть транзакции, выполненные из methodA () и methodB ()должен получить откат, но транзакция в methodC должна быть зафиксирована, и откат не должен быть.

Для отката транзакции, которую я использую -

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

Сценарий в реальном времени -

Когда я выполняю транзакцию, я пытаюсь создать несколько транзакций.На основании этих транзакций я проверяю, достигло ли одно из значений порогового значения, мне нужно вызвать почту.Это письмо является транзакцией БД.Все остальные транзакции должны быть откатаны, и только почтовая транзакция должна быть сохранена.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: -

Аналогичный вопрос -

совершить изменения в try-catch внутри @ Transactional

Но это не решает мою проблему.что если @Transactional задан также на уровне класса и на уровне метода ..?

1 Ответ

0 голосов
/ 13 мая 2019

по моему, код такой

@Transactional(propagation= Propagation.REQUIRED)
public void methodA() {
    methodB();
}

public void methodB() {

    if(validtaion=true){
        SeverB.methodC();
        throw YourException;
    }
}

// in ServerB.java
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodC() {
    // do your thing
}

и вам лучше проверить, хорошо ли это работает.

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