spring 事务传播行为
1.PROPAGATION_REQUIRED 如果当前存在一个事务,则加入当前事务。如果不存在任何事务,则创建一个新事务。总之,要至少保证在一个事务中运行。PROPAGATION_REQUIRED通常作为默认的事务传播行为。
2.PROPAGATION_SUPPORTS 如果当前存在一个事务,则加入当前事务。如果当前不存在事务,则直接执行。对于一些查询方法来说,PROPAGATION_SUPPORTS通常是比较合适的传播行为选择。如果当前方法直接执行,那么不需要事务的支持。如果当前方法被其他方法调用,而其它方法启动了一个事务,PROPAGATION_REQUIRED可以保证当前方法能够加入当前事务,并洞察当前事务对数据资源所做的更新。
3.PROPAGATION_MANDATORY PROPAGATION_MANDATORY强制要求当前存在一个事务,如果不存在,则抛出异常。如果某个方法需要事务支持,但自身又不管理事务提交或回滚,那么比较适合使用PROPAGATION_MANDATORY。
4.PROPAGATION_REQUIRES_NEW 不管当前是否存在事务,都会创建新的事务。如果当前存在事务,会将当前事务挂起(suspend)。如果某个业务对象所做的事情不想影响到外层事务,PROPAGATION_REQUIRES_NEW应该是合适的选择。
5.PROPAGATION_NOT_SUPPORTED 不支持当前事务,而是在没有事务的情况下执行。如果当前存在事务的话,当前事务原则上将被挂起(suspend),但这要看对应的PlatfromTransactionManager实现类是否支持事务的挂起。
6.PROPAGATION_NEVER 永远不需要当前存在事务,如果存在当前事务,则抛出异常
7.PROPAGATION_NESTED 如果存在当前事务,则在当前事务的一个嵌套事务中执行,否则与PROPAGATION_REQUIRED的行为类似,即创建新的事务,在新创建的事务中执行。