@Transactional方法中使用@Async执行异步任务时出现的问题
最近在项目中遇到以上问题,在执行有事务注解的方法中,事务没有提交就执行了异步方法,导致异步方法中获取数据库数据还是之前的数据。
目标:@Transactional事务提交后执行异步任务
解决办法:
if (TransactionSynchronizationManager.isActualTransactionActive()) {
//存在事物,则注册事务同步处理
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
async(); // 异步方法
}
});
} else {
// 不存在事务,执行异步方法
async()
}