Spring嵌套事务几种情形

北城以北 提交于 2020-01-03 15:46:20

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!