Spring事务失效场景

1. 方法不是 public
Spring 事务只对 public 方法生效,private/protected 不生效。

2. 同类内部调用(this.方法)
比如 A 方法无事务,调用同类里有 @Transactional 的 B 方法,事务不生效。
原因:没走代理。

3. 异常被 try-catch 吃掉了
方法里 try-catch 了异常,没往外抛,Spring 感知不到,不会回滚。

4. 抛出的异常不是默认类型
默认只回滚 RuntimeException & Error。
抛 Exception(受检异常)不回滚,需要加:
@Transactional(rollbackFor = Exception.class)

5. 没有被 Spring 管理
类没加 @Service/@Component 等注解,没交给 Spring 容器,事务不生效。

6. 多线程调用
新线程里的操作不在原事务里,独立连接、独立事务。

7. 数据库引擎不支持事务
比如 MySQL MyISAM,本身不支持事务,怎么配都没用。

8. 传播机制配置错误
比如用了 NOT_SUPPORTED、NEVER,会以非事务方式执行。

9. 类被代理方式问题(比如 CGLIB 对 final 方法)
final / static 方法无法被代理,事务不生效。

10. 开启了多个数据源但没指定事务管理器
多数据源场景下,没指定对应 txManager,事务不生效。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务