Spring事务失效常见场景

本文总结了Spring事务管理中常见的八大问题,包括事务方法访问权限、异常处理、数据库引擎支持、注解未被Spring管理、异常吞没、递归调用、传播行为和多线程调用。针对每个问题提供了具体的解决方法,如修改访问修饰符、调整异常处理、选择支持事务的数据库引擎等,帮助开发者更好地理解和解决Spring事务管理中遇到的问题。
摘要由CSDN通过智能技术生成

内容来源:https://www.bilibili.com/video/BV1T34y1t7pf?spm_id_from=333.851.b_7265636f6d6d656e64.2

1、事务方法的修饰符不是public
解决方法:
1)改成public
2)开启AspecJ代理模式

2、@Transactional注解的方法抛出的异常不受事务支持
解决方法:
1)把这个异常加入rollbackfor
2)抛出运行时异常或rollbackfor中的异常

3、数据表本身不支持事务
解决方法:把MyISAM换成InnoDB

4、@Transactional注解没有被Spring管理(比如漏了@Service,这样就不会被加载成bean,也就不会有事务了)

5、try-catch掉异常后没有再次抛异常

6、事务方法调用自身(因为自己调用自己不是动态代理)
解决方法:
1)把被调用者(加了事务的方法)和调用者分开
2)自己注入自己 @Autowired
3)手动获取代理类来调用
4)把被调用者的@Transactional移到调用者方法上

7、传播行为不支持事务(Propagation.NOT_SUPPORTED)

8、多线程调用
两个方法如果在不同的线程中,事务是不同的(不是同一个数据库连接)【底层是connection.commit或connection.rollback】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值