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嵌套事务:
- 主事务和嵌套事务属于同一个事务
- 嵌套事务出错回滚不会影响到主事务
- 主事务回滚会将嵌套事务一起回滚了