Spring事务传播机制

  • 关键控制
  • 字段
  • 常见组合

Propagation源码

public enum Propagation {

    // 如果有,就用;没有,就创建一个。默认方式
    REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
    // 如果有,就用;没有,就没有。
    SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
    // 如果有,就用;没有,则异常。
    MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
    // 总是新建,并挂起current tran,如果有的话。
    REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
    // 如果有,则挂起;如果没有,则没有。
    NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
    //如果有,则异常。
    NEVER(TransactionDefinition.PROPAGATION_NEVER),
    // 如果有,就事务嵌套。
    NESTED(TransactionDefinition.PROPAGATION_NESTED);


    private final int value;

    Propagation(int value) {
        this.value = value;
    }

    public int value() {
        return this.value;
    }
}

常用组合

  • A:REQUIRED——默认都是需要
    • B:REQUIRED——默认,相当于传递。使用A的事务。
    • B:REQUIRES_NEW——重启开启一个新的,挂起之前的。两个相互独立。挂起A,New B,回复A。
    • B:SUPPORTS——佛性
    • B:NESTED——嵌套事务。

嵌套分析

  • 先拦截异常
    • 处理异常,还是抛出异常
    • A判断是commit还是rollback。

results matching ""

    No results matching ""