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 的一样。