当事务方法被另一个事务方法调用时,被调用的方法就会将事务传播给调用方。
而传播行为就是指这个被调方法所定义的事务如何传播过去。
Spring定义了7种事务的传播行为:
Propagation.REQUIRED
(默认) 表示所修饰的方法必须运行在事务中。当调用方抛出异常的时候,被调的方法也会回滚。
Propagation.REQUIRES_NEW
表示所修饰的方法只会运行在它自己的事务中,与调用方的事务是互不影响的。当调用方抛出异常的时候,被调方法不会回滚。
Propagation.SUPPORTS
表示所修饰的方法自身不运行在事务中,若调用方有事务,那么它就运行在调用方的事务中,若调用方没有事务,就以非事务方式运行。
Propagation.MANDATORY
表示所修饰的方法必须在事务中运行。若调用方没有事务,就抛出异常,且回滚。
Propagation.NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
Propagation.NEVER
表示所修饰的方法以非事务的方式运行,若调用方有事务,就抛出异常Existing transaction found for transaction marked with propagation ‘never’
Propagation.NESTED
若调用方有事务,则嵌套事务内执行。如果调用方没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
(这个和REQUIRED区别在于一个是加入到一个事务,一个是在嵌套事务运行)