Имеем:
@Transactional(propagation = Propagation.REQUIRED)
public class MyClass implementes MyInterface { ...
MyInterface имеет единственный метод: go()
.
Когда go() выполняется, мы начинаем новую транзакцию, которая совершает/откаты после завершения метода - это нормально.
Теперь скажем, в go() мы вызываем частный метод в MyClass, который имеет @Transactional(propagation = Propagation.REQUIRES_NEW
. Кажется, что Spring "игнорирует" аннотацию REQUIRES_NEW и не запускает новую транзакцию. Я считаю, что это потому, что Spring AOP работает на уровне интерфейса (MyInterface) и не перехватывает никаких вызовов методам MyClass. Правильно ли это?
Есть ли способ начать новую транзакцию в транзакции go()? Единственный способ вызвать другой Spring управляемый bean, который имеет транзакции, настроенные как REQUIRES_NEW?
Обновить: добавив, что, когда клиенты выполняют go()
, они делают это через ссылку на интерфейс, а не класс:
@Autowired
MyInterface impl;
impl.go();