事务的传播行为(Propagation)定义了一个事务方法在被调用时如何与已有的事务进行交互。Spring 提供了多种传播行为,常用的包括 PROPAGATION_REQUIRED
、PROPAGATION_REQUIRES_NEW
、PROPAGATION_NESTED
等。每种传播行为的含义略有不同,具体表现为方法如何参与事务的传播。
下面通过 Java 代码示例来展示几种常见的事务传播行为的使用。
1. PROPAGATION_REQUIRED
(默认行为)
PROPAGATION_REQUIRED
是最常用的事务传播行为,表示如果当前没有事务,则新建一个事务;如果当前存在事务,则加入到该事务中。
@Service
public class UserService {
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
// 执行数据库操作
System.out.println("Executing methodA");
// 调用methodB,它会加入到当前的事务中
methodB();
}
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
// 执行数据库操作
System.out.println("Executing methodB");
}
}
解释:
methodA
被@Transactional(propagation = Propagation.REQUIRED)
注解标注,表示它会在当前事务中执行。如果当前没有事务,它会创建一个新事务。methodA
内部调用了methodB
,methodB
也使用了@Transactional(propagation = Propagation.REQUIRED)
注解,因此methodB
会加入到methodA
的事务中,而不会开启一个新事务。