在Spring事务中,事务传播行为定义了一个方法如何参与到已经在运行中的事务中。Spring框架提供了一系列的事务传播规则,通过@Transactional
注解或者编程式事务管理来使用。以下是Spring事务传播规则:
-
REQUIRED(默认):
- 如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。这是最常用的传播规则,也是默认的传播规则。
@Transactional(propagation = Propagation.REQUIRED) public void methodWithTransaction() { // ... }
-
SUPPORTS:
- 如果当前存在事务,则加入该事务;如果没有事务,则以非事务的方式执行。
@Transactional(propagation = Propagation.SUPPORTS) public void methodWithTransaction() { // ... }
-
MANDATORY:
- 必须在事务中运行,如果当前没有事务,则抛出异常。
@Transactional(propagation = Propagation.MANDATORY) public void methodWithTransaction() { // ... }
-
REQUIRES_NEW:
- 如果当前存在事务,则挂起当前事务,并创建一个新的事务;如果没有事务,则创建一个新的事务。
@Transactional(propagation = Propagation.REQUIRES_NEW) public void methodWithTransaction() { // ... }
-
NOT_SUPPORTED:
- 以非事务的方式执行,如果当前存在事务,则挂起该事务。
@Transactional(propagation = Propagation.NOT_SUPPORTED) public void methodWithTransaction() { // ... }
-
NEVER:
- 以非事务的方式执行,如果当前存在事务,则抛出异常。
@Transactional(propagation = Propagation.NEVER) public void methodWithTransaction() { // ... }
-
NESTED:
- 如果当前存在事务,则在嵌套事务中执行;如果没有事务,则创建一个新的事务。嵌套事务是当前事务的一个子事务,它有独立的保存点(savepoint)。
@Transactional(propagation = Propagation.NESTED) public void methodWithTransaction() { // ... }
这些传播规则允许开发者在使用Spring事务时更灵活地定义事务的行为,根据业务需求选择适当的传播规则。
Was this helpful?
0 / 0