1、数据库引擎不支持事务
从MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。
2、类没有被spring管理
类上少了类似:@Component,@Controller,@Service, @Mapper或@Repository等注解。
3、@Transactional注解用在了非public修饰的方法上
4、同一个类中方法互相调用(自调用)
同一个类中方法A调用方法B(B方法上有@Transactional),无论方式A上是否有事务注解都会引起事务失效,因为只有当事务方法被当前类以外的代码调用时,才会由spring生成代理对象,通俗点讲:自调用时该类对> 象还没有被spring管理。
5、传播行为配置成了不支持事务:Propagation.NOT_SUPPORTED表示不以事务运行,当前若存在事务则挂起。
6、异常被try-catch“吃掉了”
例如:Service中的方法抛出了一个异常,然而在controller中又对异常进行的try-catch,service抛出异常表示要回滚,然后controller中又对异常进行了捕获和处理,controller中就会认为当前方法是正常提> 交的,不需要回滚,事务自然就会失效。
7、数据源没有配置事务管理器
8、异常类型不匹配