Spring事务的传播机制是为了解事务在互相调用的过程中,是如何进行传播的。Spring为我们提供了7种传播机制:
REQUIRED
:A方法调用B方法;如果A方法有事务,则B方法加入A方法的事务,如果A方法没有事务,则B方法自己新建一个事务。SUPPORTS
:A方法调用B方法;如果A方法有事务,则B加入A方法的事务,如果A方法没有事务,则B方法以非事务方式运行。MANDATORY
:A方法调用B方法;如果A方法有事务,则B方法加入A方法的事务,如果A方法没有事务,则B方法抛出异常。REQUIRES_NEW
:A方法调用B方法;不管A方法有没有事务,B方法都新建一个自己的事务。NOT_SUPPORTED
:A方法调用B方法;不管A方法有没有事务,B方法以非事务方式运行。NEVER
:A方法调用B方法;如果A方法有事务,则B方法抛出异常,如果A方法没有事务,则B方法也以非事务方式运行。NESTED
:A方法调用B方法;如果A方法有事务,则B方法嵌套
在A方法的事务中运行,如果A方法没有事务,则B方法自己新建一个事务。
关于NESTED
嵌套事务:
- 主事务和嵌套事务属于同一个事务
- 嵌套事务出错回滚不会影响到主事务
- 主事务回滚会将嵌套事务一起回滚了