spring boot注解@Transactional失效
引言
数据库事务,将有限系列的执行命令作为单个逻辑执行单元,单元内的任务要么全部成功,要么全部失败。
起因
由于业务逻辑需要,操作要么全部成功,要么全部失败。于是,抽出一个公共的service对数据库进行增删改操作。在执行这个方法的时候发现最后一次的操作失败了之后,前面的所有操作都成功了,没有回滚。
如何排查事务失效的原因
当@Transactional不起作用时,可以通过以下几个步骤确认一下问题:
1、首先要看数据库对应的库、表所设置的引擎是什么。Mylsam不支持事务,如果需要用事务,必须改为InnnoDB
2、@Transactional所注解的方法是否为public
3、@Transactional所注解的方法所在的位置
4、需要调用该方法,且需要支持事务特性的调用方是在@Transactional所在的类的外面。注意:类内部的其他方法调用了这个注解了@Transactional的方法,事务是不会起作用的
这意味着,一个目标对象的方法调用该目标对象的另外一个方法,即使被调用的方法已使用了@Transactional注解标记,事务也不会有效执行
5、注解为事务范围的方法中,事务的回滚仅仅对于unchecked的异常有效,对于checked异常无效。也就是说事务回滚仅仅发生在出现RuntimeException或Error的时候
如果希望一般的异常也能触发事务回滚,需要在注解了@Transactional的方法上,将@Transactional回滚参数设置为:@Tran
文章来源: blog.csdn.net,作者:隔壁老瓦,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/wxb880114/article/details/96970515
- 点赞
- 收藏
- 关注作者
评论(0)