事务传播行为
事务传播行为指的是两个事务方法嵌套时对于事务的处理方式。
Spring 有七种事务传播行为。
- PROPAGATION_REQUIRED
- PROPAGATION_SUPPORTS
- PROPAGATION_MANDATORY
- PROPAGATION_REQUIRES_NEW
- PROPAGATION_NOT_SUPPORTED
- PROPAGATION_NEVER
- PROPAGATION_NESTED
说明
PROPAGATION_REQUIRED
这是 Spring 默认的传播行为,如果当前方法不在外层方法事务当中,则为当前方法开启一个新的事务,否则就加入到外层事务当中。
PROPAGATION_SUPPORTS
如果当前方法在外层方法事务当中,则将当前方法加入到外层事务当中。如果没有外层事务,则不作处理正常执行。
PROPAGATION_MANDATORY
从字面上理解,MANDATORY 意思是强制的,表示该方法必须在一个事务中才能执行,否则抛出异常。
PROPAGATION_REQUIRES_NEW
该传播行为和 PROPAGATION_REQUIRED 不同点在于如果存在外层事务,会先挂起外层事务,为该方法新开一个事务,两个事务相互独立。
PROPAGATION_NOT_SUPPORTED
该传播行为和 PROPAGATION_SUPPORTS 的区别在于不会将该方法加入到外层事务当中,如果有外层事务,则先挂起外层事务,然后再执行当前方法。
PROPAGATION_NEVER
从来都是在非事务环境下执行,如果存在事务,则跑出异常。和 PROPAGATION_MANDATORY 完全相反。
PROPAGATION_NESTED
如果当前存在事务,则嵌套执行,否则与 PROPAGATION_REQUIRED 类似。