Spring 事务的传播性

Spring 事务的传播行为

为了方便好记,我把它分为三大类,支持当前事务,不支持当前事务,其他事务。

支持当前事务

1、PROPAGATION_REQUIRED:如果存在当前事务,则加入该事务;如果不存在当前事务,则新建一个事务。

2、PROPAGATION_SUPPORTS:如果存在当前事务,则加入该事务;如果不存在当前事务,则以非事务的方式继续运行。

3、PROPAGATION_MANDATORY:如果存在当前事务,则加入该事务;如果不存在当前事务,则抛出异常。

不支持当前事务

4、PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,则将该事务挂起。

5、PROPAGATION_NOT_SUPPORTED:以非事务的方式运行,如果当前存在事务,则将该事务挂起。

6、PROPAGATION_NEVER:以非事务的方式运行,如果当前存在事务,则跑出异常

其他事务

7、PROPAGATION_NESTED:如果当前有一个事务在运行中,则应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务中进行提交或者回滚。

如果封装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。如果封装事务不存在,则同 PROPAGATION_REQUIRED 的一样。