引言
数据库事务,将有限系列的执行命令作为单个逻辑执行单元,单元内的任务要么全部成功,要么全部失败。
起因
由于业务逻辑需要,操作要么全部成功,要么全部失败。于是,抽出一个公共的service对数据库进行增删改操作。在执行这个方法的时候发现最后一次的操作失败了之后,前面的所有操作都成功了,没有回滚。
如何排查事务失效的原因
当@Transactional不起作用时,可以通过以下几个步骤确认一下问题:
1、首先要看数据库对应的库、表所设置的引擎是什么。Mylsam不支持事务,如果需要用事务,必须改为InnnoDB
2、@Transactional所注解的方法是否为public
3、@Transactional所注解的方法所在的位置
4、需要调用该方法,且需要支持事务特性的调用方是在@Transactional所在的类的外面。注意:类内部的其他方法调用了这个注解了@Transactional的方法,事务是不会起作用的
这意味着,一个目标对象的方法调用该目标对象的另外一个方法,即使被调用的方法已使用了@Transactional注解标记,事务也不会有效执行
5、注解为事务范围的方法中,事务的回