Spring嵌套事务原理

2020-03-03  本文已影响0人  晚歌歌

Spring 采用保存点(Savepoint)实现嵌套事务原理

Spring采用一个物理事务,但是结合着savepoint机制(MySql中称为保存点)实现一个事务中的指定范围提交。
当某个方法将Spring事务传播级别设置为PROPAGATION_NESTED的时候,如果创建事务时已经存在了一个事务,则会创建一个嵌套事务。

//创建保存点
AbstractPlatformTransactionManager. handleExistingTransaction
status.createAndHoldSavepoint();

//提交事务成功释放保存的保存点
AbstractPlatformTransactionManager.processCommit
status.releaseHeldSavepoint();

//如果有保存点,同样是对当前保存点进行回滚,
//依此达到部分回滚的功能
AbstractPlatformTransactionManager. processRollback
status.rollbackToHeldSavepoint();

案例:
解惑 spring 嵌套事务

class A {
    public void invoke() {
        try {
            new B().invoke();
        catch (Exception e) {
            new C().invoke();
        }
        // 此处可能还有其他业务代码
        ...
    };
}

class B {
    public void invoke() {};
}

class C {
    public void invoke() {};
}

不论使用REQUIRES_NEW或是NESTED,在调用B的invoke时如果发生异常,都能正确完成业务逻辑

上一篇 下一篇

猜你喜欢

热点阅读