Используя Spring Boot 2.1.1.RELEASE / Spring Framework 5.1.4, у меня есть приложение с включенными аннотациями @Async
и @Transactional
через:
@EnableAsync(mode = AdviceMode.ASPECTJ)
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
При запуске аннотированного методав обоих случаях сначала создается транзакция, а затем начинается асинхронное выполнение.Таким образом, фактическое тело метода не выполняется внутри транзакции.
@Transactional
@Async
public void myAsyncMethod() {
// asynchronous database stuff
}
Как я могу сконфигурировать Spring / аспекты для фактического выполнения в порядке, который имеет смысл, например, запустить транзакцию в новом потоке?
Кстати, со старым Spring Boot 1.5.17 / Spring Framework 4.3.20 он действительно работал.
Демонстрация: https://github.com/jaarts/spring-asynctransaction-demo