SpringBoot-事物-使用异步
事务中使用异步,记住这几点:
- 事务不跨线程:异步线程不会自动加入主事务,需要事务时独立开启。
- 回滚不联动:主事务与异步事务各自提交、回滚。
- 注意执行顺序:异步任务可能读不到主事务未提交的数据。
- 提交后再异步执行:用 TransactionSynchronizationManager 注册 afterCommit 回调。注意afterCommit()执行时,事务已提交,如果afterCommit执行失败,不会回滚事务!!!
- 等待异步完成再继续:用 Future.get() 或 CompletableFuture.join();任务完成必须涵盖事务提交,同时警惕持锁等待。
- 注意代理和异常:同类直接调用 @Async 默认不生效;异步异常不会自动让主事务回滚。
使用场景:
1、等待异步完成再继续的使用场景。当后续操作需要异步线程数据且从创建异步线程到达需要异步线程数据的过程中,还有很多耗时操作,可运用这种方法

浙公网安备 33010602011771号