Spring事务传播行为是指当一个事务方法(当前事务)被另一个事务方法(调用者)调用时,这个事务方法(当前事务)对另一个事务方法(调用者)的态度。简单来说,就是当一个事务方法A调用了另一个事务方法B时,B应该如何应对。
用伪代码说明:
public void methodA(){
methodB();
//doSomething
}
@Transaction(Propagation=XXX)
public void methodB(){
//doSomething
}
代码中methodA()方法嵌套调用了methodB()方法,methodB()的事务传播行为由@Transaction(Propagation=XXX)设置决定。这里需要注意的是methodA()并没有开启事务,某一个事务传播行为修饰的方法并不是必须要在开启事务的外围方法中调用。
Spring事务传播行为有七种类型,这些类型决定了当一个事务方法被另一个事务方法调用时,应该如何使用事务。例如:
1. PROPAGATION_REQUIRED(默认传播行为):表示当前方法必须在事务中运行。如果调用者有事务,则当前方法加入到调用者事务中运行。如果调用者没有事务,则当前方法自己新开启一个事务运行。这是最常见的选择。
2. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
其他的传播行为类型还包括PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED等,每种类型都有其特定的行为规则。
3. PROPAGATION_MANDATORY:强制要求当前存在事务,如果不存在事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW:重新开启一个新的事务,如果当前存在事务,则挂起该事务。
5. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起该事务。
6. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7. PROPAGATION_NESTED:如果当前存在事务,则嵌套事务中执行。如果当前没有事务,就执行REQUIRED行为。
这些传播行为类型提供了灵活的事务控制机制,使得开发者可以根据具体的业务需求,选择合适的事务传播行为。
标签:事务,Spring,行为,传播,PROPAGATION,当前,方法 From: https://www.cnblogs.com/wangxie/p/18005442