Spring事务的7种传播行为
事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。
事务传播行为类型 | 说明 |
---|
REQUIRED | 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
MANDATORY | 使用当前的事务,如果当前没有事务,就抛出异常。 |
REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
事务传播行为类型 | 当前没有有事务 | 当前有事务 |
---|
REQUIRED | 新建一个事务 | 使用当前事务 |
REQUIRES_NEW | 新建事务执行 | 挂起当前事务,新建事务执行 |
SUPPORTS | 无事务执行 | 使用当前事务 |
NOT_SUPPORTED | 无事务执行 | 挂起当前事务 |
MANDATORY | 异常 | 使用当前事务 |
NEVER | 无事务执行 | 异常 |
NESTED | 新建事务 | 嵌套事务执行 |