spring中事务的传播行为
时间: 2023-10-29 07:34:06 浏览: 76
在 Spring 中,事务的传播行为(Propagation Behavior)指的是一个方法调用了另一个方法,而这两个方法都开启了事务,那么这个事务应该如何处理的规则。
Spring 中提供了 7 种不同的事务传播行为:
1. REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
2. SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
3. MANDATORY:强制必须存在一个事务,如果当前没有事务,就抛出异常。
4. REQUIRES_NEW:新建事务,如果当前存在事务,暂停当前的事务。
5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7. NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 REQUIRED 类似的操作。
其中,REQUIRED 是最常用的传播行为,它表示如果当前已经存在一个事务,就加入到这个事务中;如果当前不存在事务,则新建一个事务。通常情况下,我们都建议使用 REQUIRED 传播行为。
相关问题
spring 的事务传播行为
Spring 的事务传播行为指的是在多个事务方法相互调用时,这些方法之间事务如何进行传播和合并的规则。具体来说,Spring 定义了以下 7 种事务传播行为:
1. PROPAGATION_REQUIRED:如果当前已经存在事务,则加入该事务并在该事务中执行;如果当前没有事务,则开启一个新的事务并在其中执行。
2. PROPAGATION_SUPPORTS:如果当前已经存在事务,则加入该事务并在该事务中执行;如果当前没有事务,则不开启事务,直接执行。
3. PROPAGATION_MANDATORY:如果当前已经存在事务,则加入该事务并在该事务中执行;如果当前没有事务,则抛出异常。
4. PROPAGATION_REQUIRES_NEW:开启一个新的事务并在其中执行;如果当前已经存在事务,则将当前事务挂起。
5. PROPAGATION_NOT_SUPPORTED:不使用事务执行方法;如果当前已经存在事务,则将当前事务挂起。
6. PROPAGATION_NEVER:不允许在事务中执行;如果当前已经存在事务,则抛出异常。
7. PROPAGATION_NESTED:如果当前已经存在事务,则在该事务的嵌套事务中执行;如果当前没有事务,则开启新的事务并在其中执行。在嵌套事务中,如果子事务出现异常,则只回滚子事务;如果父事务出现异常,则回滚所有事务。
Spring的事务传播行为
Spring的事务传播行为是指在多个事务方法相互调用的情况下,事务应该如何进行传播和交互。
Spring中定义了7种事务传播行为,分别为:
1. PROPAGATION_REQUIRED(默认):如果当前已经有一个事务在运行,那么方法就在这个事务中运行,否则就启动一个新的事务。
2. PROPAGATION_SUPPORTS:如果当前已经有一个事务在运行,那么方法就在这个事务中运行,否则就以非事务的方式运行。
3. PROPAGATION_MANDATORY:方法必须在事务中运行,如果当前没有事务正在运行,就抛出异常。
4. PROPAGATION_REQUIRES_NEW:方法必须启动一个新的事务,并在它自己的事务内运行,如果当前已经有一个事务在运行,就将它挂起。
5. PROPAGATION_NOT_SUPPORTED:方法必须以非事务的方式运行,如果当前已经有一个事务在运行,就将它挂起。
6. PROPAGATION_NEVER:方法必须以非事务的方式运行,如果当前已经有一个事务在运行,就抛出异常。
7. PROPAGATION_NESTED:如果当前已经有一个事务在运行,那么方法就在这个事务的嵌套事务中运行,否则就启动一个新的事务。嵌套事务是独立于外部事务的,有自己的保存点,可以回滚到保存点。
不同的传播行为适用于不同的场景,合理使用可以提高事务的效率和正确性。
阅读全文