2017-02-21 10 views
0
@Service 
public Class Demo(){ 

    @Transactional(rollbackFor=CustomException.class) 
    @Override 
    public RetunType methodONE()throws Exception{ 
     methodTWO(); 
     methodFIVE(); 
    } 

    @Transactional 
    @Override 
    public RetunType methodTWO()throws Exception{ 
      methodFOUR(); 
      methodTHREE(); 
      throws new CustomException("error_msg"); 
     } 

    @Transactional(propagation=Propagation.REQUIRES_NEW) 
    @Override 
    public RetunType methodTHREE(){ 
     . 
     .. 
     . 
     .. 
     . 
    } 
} 

public Class CustomException extends Exception{ 

    public CustomException(String msg){ 
     super(msg) 
    } 
} 

Я не хочу откатывать только свой метод транзакции. Теперь он откатывает все изменения, сделанные в методеTWO/THREE/FOUR/FIVE. Я не могу понять дальше.Провинция Провинциальное поведение и откат транзакции

Я пытаюсь сделать код, связанный с транзакциями, во всех других методах и в методеThree() это просто обновление статуса в БД.

ответ

0

Если я понимаю, что вы пытаетесь сделать здесь, у вас есть методTHREE, который запускается внутри собственной транзакции, вложенной внутри родительской транзакции, вероятно, ваша проблема заключается в том, что методы находятся в одном классе.

Это связано с тем, что Spring применяет AOP, в этом случае применяя транзакционную логику, используя прокси-серверы для вызова методов перехвата. Проблема заключается в том, что вызов метода является внутренним или самозарядающимся, и поэтому никогда не проходит через прокси. Это означает, что для метода MethodThree() никогда не создается новая транзакция.

У вас есть два варианта:

  1. метод Move Три в отдельный класс.

  2. Измените режим от прокси до AspectJ, который будет переплетять транзакционную логику в сам класс.

Spring Doc for @Transactional

+0

** с опцией 1 мой вложенная результат транзакции получен успешно ** –

+0

Хорошо, я думал, что это могло бы. Пожалуйста, отметьте мой ответ как принятый, если он поможет решить вашу проблему. Благодарю. – AlyoshaKaramazov