Spring 事务传播(Transaction Propagation)是定义在事务方法被嵌套调用时,事务是如何传播的一种机制。Spring 提供了多种事务传播方式,可以通过 @Transactional 注解的 propagation 属性来指定。
以下是常见的 Spring 事务传播方式:
-
REQUIRED:- 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
- 是默认的传播方式。
@Transactional(propagation = Propagation.REQUIRED) public void requiredExample() { // ... } -
SUPPORTS:- 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
@Transactional(propagation = Propagation.SUPPORTS) public void supportsExample() { // ... } -
MANDATORY:- 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
@Transactional(propagation = Propagation.MANDATORY) public void mandatoryExample() { // ... } -
REQUIRES_NEW:- 创建一个新的事务,如果当前存在事务,则将当前事务挂起。
@Transactional(propagation = Propagation.REQUIRES_NEW) public void requiresNewExample() { // ... } -
NOT_SUPPORTED:- 以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
@Transactional(propagation = Propagation.NOT_SUPPORTED) public void notSupportedExample() { // ... } -
NEVER:- 以非事务方式执行操作,如果当前存在事务,则抛出异常。
@Transactional(propagation = Propagation.NEVER) public void neverExample() { // ... } -
NESTED:- 如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
@Transactional(propagation = Propagation.NESTED) public void nestedExample() { // ... }
-
REQUIRED:
- 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
- 是默认的传播方式。
-
SUPPORTS:
- 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
-
MANDATORY:
- 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:
- 创建一个新的事务,如果当前存在事务,则将当前事务挂起。
-
NOT_SUPPORTED:
- 以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
-
NEVER:
- 以非事务方式执行操作,如果当前存在事务,则抛出异常。
-
NESTED:
- 如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。