sping 事务失效的8中情况
1、抛出检查异常导致事务不能正确回滚
原因:Spring 默认只会回滚非检查异常
解决:配置 rollbackFor 属性
因:事务通知只
解法1:异常原样抛出
在 catch 块添加
throw new RuntimeException(e);
解法2:手动设置 TransactionStatus.setRollbackOnly()在 catch 块添加
解法1、2:同情况2 中的解法:1、2
解法3:调整切面顺序,在 自定义切面上添加 @Order(Ordered.LOWEST_PRECEDENCE - 1)
解法1:改为 public 方法
-
@Bean
public TransactionAttributeSource transactionAttributeSource() {
return new AnnotationTransactionAttributeSource(false);
}
5、父子容器导致的事务失效
解法1:各扫描各的,不要图简便
解法1:依赖注入自己(代理)来调用,需要在配置类上添加@EnableAspectJAutoProxy(exposeProxy = true)
解法2:通过 AopContext 拿到代理对象,来调用
事务在锁外层,多线程可能出现先释放锁,后提交事务的情况。debug测试,可启多个线程,断点DataSourceTransactionManager类doCommit方法 @Transactional(rollbackFor = Exception.class) public synchronized void test() { // todo }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!