У нас есть:
@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 ()?Является ли единственный способ вызвать другой управляемый bean-компонент Spring, для которого транзакции настроены как REQUIRES_NEW?
Обновление : добавление того, что при выполнении клиентами go()
онипоэтому через ссылку на интерфейс, а не на класс:
@Autowired
MyInterface impl;
impl.go();