Spring 事务传播机制

简述

Spring事务在源码中已定义得非常清晰,请直接阅读源码,结合自身业务场景使用,此处不过多赘述

@Transactional

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
    // 其余部分已省去
    Propagation propagation() default Propagation.REQUIRED;
}

Propagation

public enum Propagation {

// 默认级别 若当前已有事务则加入 没有则新起事务
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),

// 若当前已有事务则加入 没有则以非事务的方式运行
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),

// 若当前已有事务则加入 没有则抛出异常
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),

// 若当前已有事务则挂起 并创建新的事务
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),

// 若当前已有事务则挂起 并以非事务的方式运行
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),

// 若当前已有事务则报错 若无则以非事务的方式运行
NEVER(TransactionDefinition.PROPAGATION_NEVER),

// 若当前已有事务创建一个新事务并嵌套执行
NESTED(TransactionDefinition.PROPAGATION_NESTED);
}

你可能感兴趣的:(java)