Я пытаюсь переопределить транзакционное поведение для метода службы (в данном примере 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 (), верно?
Спасибо!