记一次Spring Transactional注解事务失效问题定位

本文记录了一次在Spring中使用@Transactional注解时遇到的事务失效问题,包括事务未生效的排查过程:检查传播行为、异常处理、访问权限、回滚策略、配置错误等。最终发现是由于多数据源配置导致事务管理器选择错误,通过指定默认事务处理器解决了问题。
摘要由CSDN通过智能技术生成

背景

     平台功能,有插入数据部分丢失的情况;经初步定位是因为多次入库操作没有在一个事务内进行

解决过程

     利用Spring transactional注解对service中操作入库的操作方法添加注解;添加完成之后,测试发现,事务没有生效。what?

然后进行事务没有生效的原因定位;

1、检查事务的传播方式,项目默认的传播行为;

     项目的默认传播行为,PROPAGATION_REQUIRED,符合业务应用场景

2、经排查发现,有部分方法异常被catch住,没有把异常抛出,导致不能检查异常,从而不会回滚

     修改方法,把捕获的异常重新抛出;测试发现,异常抛出后,事务仍然没有生效,抛出异常后 ,DB依然没有回滚,什么情况?继续排查

3、@Transactional 只对 public修饰上生效,其他修饰不起作用

     排查,没有问题,所有的注解的方法都是public方法

4、默认情况下此注解会对unchecked异常进行回滚,对checked异常不回滚。

       所有如果想要对checked异常也进行事务回滚,需要制定transactional 回滚类型 rollback = Exception.class;  这样,会对捕获的所有异常都进行回滚;实测,依然不生效,此时,我心态有点不好了,哈哈,但是依然没有放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值