写点什么

spring 事务失效的情况

作者:周杰伦本人
  • 2022-10-22
    贵州
  • 本文字数:622 字

    阅读完需:约 2 分钟

spring 事务失效的情况

spring 事务失效也是一个老生常谈的话题,也是工作中经常会遇到的情况,那么在什么情况下 spring 的事务会失效呢?在这里我简单罗列一下相关的情景

bean 对象没有被 spring 管理

当这个类的 bean 对象没有受到 spring 容器管理的时候,显然事务会不起作用

定义的方法不是 public 修饰符

如果我们写的有关事务的方法不是 public 修饰符的话,事务同样会失效,但是这种情况遇到的较少,因为我们在开发过程中一般都是 public

数据源没有配置事务管理器

也就是项目中是否开启了事务,没有开启事务显然事务不起作用

数据库本身不支持事务

这个问题也是有可能遇到的,例如数据库是 Mysql 的 Myisam 引擎的话,显然是不支持事务的

异常被捕捉了

如果异常被捕捉了,会认为程序不会出错,也就不会发生回滚操作

自身调用问题

这种情况也是十分常见的,也就是说 a 方法中调用了 b 方法,a 方法调用 b 方法是通过 this 对象来调用的,这是原始对象而不是代理对象,b 方法之所以能具有事务的能力是 spring 的 aop 生成了代理对象,通过代理对象调用方法,而通过原始对象调用会导致事务失效。

异常类型配置有问题

大家都知道 @Transactional 可以配置 rollbackFor,如果抛出的是不是 rollbackFor 指定的异常信息,同样也会导致失效。

总结

对于 spring 事务失效的几种情况我简单罗列了一下:bean 对象没有被 spring 管理,定义的方法不是 public 修饰符,数据源没有配置事务管理器,数据库本身不支持事务,异常被捕捉了,自身调用问题,异常类型配置有问题等等,注意好这些事项,事务就不会失效啦

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2020-02-29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
spring事务失效的情况_10月月更_周杰伦本人_InfoQ写作社区