spring boot注解@Transactional失效

举报
隔壁老汪 发表于 2022/06/24 22:38:07 2022/06/24
【摘要】 引言        数据库事务,将有限系列的执行命令作为单个逻辑执行单元,单元内的任务要么全部成功,要么全部失败。 起因        由于业务逻辑需要,操作要么全部成功,要么全部失败。于是,抽出...

引言
       数据库事务,将有限系列的执行命令作为单个逻辑执行单元,单元内的任务要么全部成功,要么全部失败。

起因
       由于业务逻辑需要,操作要么全部成功,要么全部失败。于是,抽出一个公共的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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。