几种Spring事务失效的场景

1、方法权限问题

定义的事务方法的访问权限必须是public,是private、default、或protected的话,spring则不会提供事务功能

2、抛出检查异常

如果@Transactional没有特别指定的情况下,Spring只会在运行时异常RuntimeException或者error时进行回滚,而IOException等检查异常不会影响回滚。
解决方案:配置rollbackFor属性,例如@Transactional(rollbackFor = Exception.class)

3、业务方法本身不活了异常

Spring回滚判断是根据是否抛出异常决定的

4、错误的使用了传播机制

Spring事务的传播机制是指在多个事务方法调用时,确定事务应该如何传播的策略。Spring提供了7种事务传播的机制:REQUIRED、SUPPORT、MANDATORY、REQUIRES_NEW、NOT_SUPPORT、NEVER、NESTED
事务传播机制说明:
Propagation.REQUIRED:Spring默认的事务传播机制,在外层有事务的时候加入外层事务,如果外层没有事务就创建一个事务执行。
Propagation.SUPPORT:如果外层存在事务则加入事务,如果外层不存在事务则以非事务的方式执行;
Propagation.NOT_SUPPORT:不支持事务,如果外层存在事务则挂起,执行完当前方法再回复外层事务之行;
Propagation.REQUIRES_NEW:每次都会创建新事务,如果外层存在事务则挂起,当当前事务执行完后恢复外层事务,如果外层无事务,则执行新的事务;
Propagation.MANDATORY:如果外层没有事务则抛出异常;
Propagation.NEVER:不支持外层事务,如果外层有事务则抛出异常;
Propagation.NESTED:该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的。

5、没有被Spring管理

不再Spring容器管理中也就无法使用了。

6、方法使用了static或final关键字

spring事务底层使用了aop,通过动态代理生成了代理类,在代理类中实现的事务的功能,使用final或static的话就无法重写被代理的方法

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容