Spring嵌套事务(遇坑总结)

      之前在解决一个线上问题时,发现一个用户在批量导入员工excel时,不光表格中新增的员工没有导入成功,其中原有存在的也被删除掉了,但是根据spring事务的原则,和系统中的业务逻辑(只有插入成功之后才会返回正常结果,否则抛出异常)若报错则会抛异常回滚,若正常执行的话也不会存在只有删除没有插入的操作。

所以后期怀疑是嵌套事务的原因:

REQUIRED

spring默认的事务传播行为就是它。

支持事务。如果业务方法执行时已经在一个事务中,则加入当前事务,否则重新开启一个事务。

外层事务提交了,内层才会提交。

内/外只要有报错,他俩会一起回滚。

 

只要内层方法报错抛出异常,即使外层有try-catch,该事务也会回滚!

因为内外层方法在同一个事务中,内层只要抛出了异常,这个事务就会被设置成rollback-only,即使外层try-catch内层的异常,该事务也会回滚。

但是虽然是嵌套事务但是并没有在内层事务增加try catch捕获异常,在外层就算加了也是没用的。。最后发现插入操作的是一个 @Async修饰的异步方法!!!尴尬。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值