Spring嵌套事务几种情形

为了方便,使用伪代码表示:)

1、同一个类,两个方法上都有事务

class A {
    @Transactional
    function T1() {
        curd 操作1
        T2()
    }

    @Transactional
    function T2() {
        curd 操作2
        抛异常
    }
}

结果:操作1和操作2都回滚

2、同一个类,被调用的方法上才有事务

class A {
    function T1() {
        curd 操作1
        T2()
    }

    @Transactional
    function T2() {
        curd 操作2
        抛异常
    }
}

结果:操作1和操作2都不回滚

3、同一个类,主方法上才有事务

class A {
    @Transactional
    function T1() {
        curd 操作1
        T2()
    }

    function T2() {
        curd 操作2
        抛异常
    }
}

结果:操作1和操作2都回滚

 

4、不同类,两个方法上都有事务

class A {
    @Transactional
    function T1() {
        curd 操作1
        B.T2()
    }
}

class B {
    @Transactional
    function T2() {
        curd 操作2
        抛异常
    }
}

结果:操作1和操作2都回滚

 

5、不同类,被调用的方法上才有事务

class A {
    function T1() {
        curd 操作1
        B.T2()
    }
}

class B {
    @Transactional
    function T2() {
        curd 操作2
        抛异常
    }
}

结果:只有操作2回滚

 

几篇关于Spring事务,动态代理的好文章:

Spring 容器AOP的实现原理动态代理 https://www.cnblogs.com/cfas/p/9307546.html 

使用动态代理实现对事务的控制 https://blog.csdn.net/a2231476020/article/details/93233115

https://www.cnblogs.com/superjt/p/4275293.html

https://blog.csdn.net/levae1024/article/details/82998386

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值