Spring在TransactionDefinition接口中规定了7种事务传播行为,他们规定了事务方法和事务方法发生嵌套时事务如何进行传播。
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
-
PROPAGATION_REQUIRED
默认事务类型,如果没有,就新建一个事务;如果有,就加入当前事务。适合绝大多数情况。 -
PROPAGATION_REQUIRES_NEW
如果没有,就新建一个事务;如果有,就将当前事务挂起。 -
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。特点就是会设置回滚点。 -
PROPAGATION_SUPPORTS
如果没有,就以非事务方式执行;如果有,就使用当前事务。 -
PROPAGATION_NOT_SUPPORTED
如果没有,就以非事务方式执行;如果有,就将当前事务挂起。即无论如何不支持事务。 -
PROPAGATION_NEVER
如果没有,就以非事务方式执行;如果有,就抛出异常。 -
PROPAGATION_MANDATORY
如果没有,就抛出异常;如果有,就使用当前事务。即强制要有事务。