Переопределите декларативные транзакционные методы с помощью программного c транзакционного кода в Spring - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь переопределить транзакционное поведение для метода службы (в данном примере someService.updateSomething ()), аннотированного аннотацией @Transactional в Spring. Для этого из другого класса я использую программный c код транзакции, подобный следующему:

@Service
public class MyServiceClass {


   private TransactionTemplate transactionTemplate; 


   public MyClass (PlatformTransactionManager transactionManager) {
       transactionTemplate = new TransactionTemplate(transactionManager);
   }



 @Transactional
 public void someMethod(){                  
    transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);     
    transactionTemplate.execute(new TransactionCallbackWithoutResult()  {    
        protected void doInTransactionWithoutResult(TransactionStatus status){  
            try{
                someService.updateSomething();    
            }catch(Exception e){
                LOGGER.error("Error has ocurred");                  
            }
        } 
    });
  }
}

Моя проблема в том, что someService.updateSomething () не запускается в новой транзакции, и я не понимаю Почему. Итак:

  • Если я вызываю прокси-сервисный метод с транзакционным поведением, например someService.updateSomething (), но в вызове я создаю новую транзакцию, как в примере, когда код попадает в прокси-метод, это займет новую созданную транзакцию, а не транзакцию, уже запущенную для метода someMethod (), верно?

Спасибо!

...