Spring事务传播机制
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);
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。