REQUIRES_NEW不起作用导致整个事务回滚——Spring事务传播机制

本文探讨了Spring中Propagation.REQUIRES_NEW事务传播行为,当在a方法调用b方法(内嵌事务)时,即使b方法在新事务中,异常未被捕获仍会导致整个事务回滚。分析了一个错误的代码示例,揭示了事务回滚的真实原因。
摘要由CSDN通过智能技术生成
1、Propagation.REQUIRES_NEW的作用

假设有个对象A,有a()方法,有个对象B,有b()方法。在a方法中调用了b方法,b方法被称为内嵌事务,不管a方法是否开启事务,只要b方法的事务的隔离级别为REQUIRES_NEW,则一定会在调用b方法时产生一个新的事务。

2、一个场景

A的a()方法:

    @Transactional
    public void a() {
        doSomething4A();
        B.b();//可能会抛出运行时异常
    }

内嵌在A中的B.b()方法:

    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = RuntimeException.class)
    @Override
    public void b() {
        doSomething4B();
        throw new RuntimeException();//故意抛出运行时异常,观察两个事务的回滚情况
    }

在这时你肯定会想,doSomething4A会执行成功,而doSomething4B会回滚,因为我们的内嵌事务b方法的隔离级别是REQUIRES_NEW,这个方法是在一个新的事务中,回滚之后不会影响外部事务。

错错错!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值