当前位置:   article > 正文

springboot事务不生效的情况_一个方法上加了事务,但在这个方法里面还有其他私有方法加了事务没生效

一个方法上加了事务,但在这个方法里面还有其他私有方法加了事务没生效

Spring Boot 使用事务:首先使用注解 @EnableTransactionManagement 开启事务支持,然后在Service方法上添加注解 @Transactional 便可。在Service中,被 @Transactional 注解的方法,将支持事务。如果注解在类上,则整个类的所有方法都默认支持事务。

  1. 如果你用了mysql数据库,先检查mysql版本,4.0之前不支持事物:select version();
    2.如果你用了mysql数据库,查看数据库存储引擎,MyISAM是不支持事物的,需要改成InnoDB;
    3.方法中手动new一个异常抛出(throw new RuntimeException())看是否事物回滚了,注意异常抛出要在service层。

声明式事务是结合代理实现,不生效的情况主要包括以下几种:
1.数据库不支持事务,比如mysql的MyISAM引擎不支持事务,而InnoDB支持事务;
2.类内部访问,即并非直接访问带@Transactional注解的方法,而是通过内部普通方法来调用带事务注解的方法;
3.私有方法,即在私有方法上添加@Transactional也不会生效;
4.异常不匹配,@Transactional注解默认处理运行时异常,即只有抛出运行时异常时,才会触发事务回滚,否则并不会;
5.多线程,在标记事务的方法内部,另起子线程执行 db 操作,此时事务同样不会生效。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/224663
推荐阅读
相关标签
  

闽ICP备14008679号