У меня есть класс, который вызывает метод publi c для другого класса через отражение. Вызывающий класс уже имеет активную транзакцию, и метод publi c в вызываемом классе помечается
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void handleProcess() { ..}
Вызов выглядит как
Runnable runnable = null;
Method handleMethod = config.handleProcessMethod;
Object handler = autowireHandler(process);
runnable = () -> {
LOGGER.info("executing method {} on {}",handleMethod,handler);
handleMethod.invoke(handler);
};
runnable.run();
Метод вызывается правильно , но журнал указывает, что он участвует в текущей транзакции, а не создает новую.
08:54:33.452 [process-executor-2] DEBUG o.springframework.orm.jpa.JpaTransactionManager - Found thread-bound EntityManager ... for JPA transaction
08:54:33.453 [process-executor-2] DEBUG o.springframework.orm.jpa.JpaTransactionManager - Participating in existing transaction
Редактировать: на самом деле журналы сверху создаются в вызванный метод, вызванный хранилищем JPA, а не до него. Похоже, что аннотация @Transactional вообще не обрабатывается.
Отражение заставляет пружину пропускать аннотацию @Transactional? Мне нужно, чтобы вызванный метод использовал свою собственную транзакцию, чтобы она фиксировалась до возврата из вызова.