Spring事务的传播行为(Propagation Behavior)在接口TransactionDefinition中定义,共七种传播行为。
PROPAGATION_REQUIRED
org.springframework.transaction.TransactionDefinition.PROPAGATION_REQUIRED
org.springframework.transaction.annotation.Propagation.REQUIRED
Support a current transaction; create a new one if none exists. Analogous to the EJB transaction attribute of the same name.
支持当前的事务,如果不存在则创建一个新事务。类似于同名的EJB事务属性。
This is typically the default setting of a transaction definition, and typically defines a transaction synchronization scope.
这是事务定义的默认设置,并且定义了事务同步作用域。
PROPAGATION_SUPPORTS
org.springframework.transaction.TransactionDefinition.PROPAGATION_SUPPORTS
org.springframework.transaction.annotation.Propagation.SUPPORTS
Support a current transaction; execute non-transactionally if none exists. Analogous to the EJB transaction attribute of the same name.
支持当前的事务,如果不存在则以非事务的方式执行。类似于同名的EJB事务属性。
NOTE: For transaction managers with transaction synchronization, PROPAGATION_SUPPORTS is slightly different from no transaction at all, as it defines a transaction scope that synchronization might apply to. As a consequence, the same resources (a JDBC Connection, a Hibernate Session, etc) will be shared for the entire specified scope. Note that the exact behavior depends on the actual synchronization configuration of the transaction manager!
注意:对于带有事务同步的事务管理器,PROPAGATION_SUPPORTS与没有事务稍有不同,因为它定义了同步可能会应用到的事务作用域。因而,对于整个指定的作用域,相同的资源(JDBC Connection、Hibernate Session等)将是共享的。注意,确切的行为依赖于事务管理器实际的同步配置。
In general, use PROPAGATION_SUPPORTS with care! In particular, do not rely on PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW within a PROPAGATION_SUPPORTS scope (which may lead to synchronization conflicts at runtime). If such nesting is unavoidable, make sure to configure your transaction manager appropriately (typically switching to "synchronization on actual transaction").
一般,使用PROPAGATION_SUPPORTS要谨慎!尤其是,在PROPAGATION_SUPPORTS作用域内不要依赖PROPAGATION_REQUIRED或PROPAGATION_REQUIRES_NEW,这可能会导致运行时事务同步冲突。如果这种嵌套是不可避免的,要确保恰当地配置事务管理器(通常切换到"synchronization on actual transaction")。
PROPAGATION_MANDATORY
org.springframework.transaction.TransactionDefinition.PROPAGATION_MANDATORY
org.springframework.transaction.annotation.Propagation.MANDATORY
Support a current transaction; throw an exception if no current transaction exists. Analogous to the EJB transaction attribute of the same name.
支持当前的事务,如果不存在则抛出异常。类似于同名的EJB事务属性。
Note that transaction synchronization within a PROPAGATION_MANDATORY scope will always be driven by the surrounding transaction.
注意:在PROPAGATION_MANDATORY作用域内的事务同步总是由外围的事务驱动。
PROPAGATION_REQUIRES_NEW
org.springframework.transaction.TransactionDefinition.PROPAGATION_REQUIRES_NEW
org.springframework.transaction.annotation.Propagation.REQUIRES_NEW
Create a new transaction, suspending the current transaction if one exists. Analogous to the EJB transaction attribute of the same name.
创建新事务,如果存在当前事务则挂起。类似于同名的EJB事务属性。
NOTE: Actual transaction suspension will not work out-of-the-box on all transaction managers. This in particular applies to org.springframework.transaction.jta.JtaTransactionManager, which requires the javax.transaction.TransactionManager to be made available it to it (which is server-specific in standard J2EE).
注意:实际的事务挂起不是对所有的事务管理器都是开箱即用。尤其是应用到JtaTransactionManager,它要求javax.transaction.TransactionManager来使这个可用。
A PROPAGATION_REQUIRES_NEW scope always defines its own transaction synchronizations. Existing synchronizations will be suspended and resumed appropriately.
PROPAGATION_REQUIRES_NEW作用域总是定义自己的事务同步。已存在的同步将被恰当地挂起和恢复。
PROPAGATION_NOT_SUPPORTED
org.springframework.transaction.TransactionDefinition.PROPAGATION_NOT_SUPPORTED
org.springframework.transaction.annotation.Propagation.NOT_SUPPORTED
Do not support a current transaction; rather always execute non-transactionally. Analogous to the EJB transaction attribute of the same name.
不支持当前事务,总是以非事务方式执行。类似于同名的EJB事务属性。
NOTE: Actual transaction suspension will not work out-of-the-box on all transaction managers. This in particular applies to org.springframework.transaction.jta.JtaTransactionManager, which requires the javax.transaction.TransactionManager to be made available it to it (which is server-specific in standard J2EE).
注意:实际的事务挂起不是对所有的事务管理器都是开箱即用。尤其是应用到JtaTransactionManager,它要求javax.transaction.TransactionManager来使这个可用。
Note that transaction synchronization is not available within a PROPAGATION_NOT_SUPPORTED scope. Existing synchronizations will be suspended and resumed appropriately.
在PROPAGATION_NOT_SUPPORTED作用域内,事务同步是不可用的。已存在的同步将被恰当地挂起和恢复。
PROPAGATION_NEVER
org.springframework.transaction.TransactionDefinition.PROPAGATION_NEVER
org.springframework.transaction.annotation.Propagation.NEVER
Do not support a current transaction; throw an exception if a current transaction exists. Analogous to the EJB transaction attribute of the same name.
不支持当前事务,如果存在当前事务则抛出异常。类似于同名的EJB事务属性。
Note that transaction synchronization is not available within a PROPAGATION_NEVER scope.
注意:在PROPAGATION_NEVER作用域内,事务同步是不可用的。
PROPAGATION_NESTED
org.springframework.transaction.TransactionDefinition.PROPAGATION_NESTED
org.springframework.transaction.annotation.Propagation.NESTED
Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else. There is no analogous feature in EJB.
如果存在当前事务,则在嵌套事务中执行,行为像PROPAGATION_REQUIRED。EJB中没有类似的事务属性。
NOTE: Actual creation of a nested transaction will only work on specific transaction managers. Out of the box, this only applies to the JDBC org.springframework.jdbc.datasource.DataSourceTransactionManager when working on a JDBC 3.0 driver. Some JTA providers might support nested transactions as well.
注意:嵌套事务的实际创建仅在特定事务管理器上起作用。仅当在JDBC 3.0驱动上工作时,应用于JDBC DataSourceTransactionManager。一些JTA提供商可能也支持嵌套事务。
总结
TransactionDefinition接口 | Propagation枚举 | 描述 |
PROPAGATION_REQUIRED | REQUIRED | 支持当前的事务,如果不存在则创建一个新事务。 |
PROPAGATION_SUPPORTS | SUPPORTS | 支持当前的事务,如果不存在则以非事务的方式执行。 |
PROPAGATION_MANDATORY | MANDATORY | 支持当前的事务,如果不存在则抛出异常。 |
PROPAGATION_REQUIRES_NEW | REQUIRES_NEW | 创建新事务,如果存在当前事务则挂起。 |
PROPAGATION_NOT_SUPPORTED | NOT_SUPPORTED | 不支持当前事务,总是以非事务方式执行。 |
PROPAGATION_NEVER | NEVER | 不支持当前事务,如果存在当前事务则抛出异常。 |
PROPAGATION_NESTED | NESTED | 如果存在当前事务,则在嵌套事务中执行。 |
相关推荐
浅谈Spring事务传播行为实战 Spring框架提供了事务管理的标准实现,通过注解或者XML文件的方式声明和配置事务。事务管理是指按照给定的事务规则来执行事务的提交或者回滚操作。事务的机制实现很大一部依赖事务日志...
通过上述对Spring事务传播行为的详细介绍,我们可以看出,正确理解和应用这些传播行为对于构建健壮的事务管理机制至关重要。每种传播行为都有其特定的应用场景和限制条件,开发者应根据具体的业务逻辑和需求来合理...
本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...
Spring事务传播行为问题解决 Spring事务传播行为问题解决是指在Spring框架中,事务传播行为的配置和使用问题。事务传播行为是指在多个事务方法之间的调用关系,如何去管理和控制事务的传播和回滚。 一、 Spring...
通过这样的实际案例分析,我们可以更直观地看到不同事务传播行为在实际应用中的效果,从而加深对Spring事务管理的理解。在实际开发中,根据业务需求正确选择事务传播行为,有助于保证数据的一致性和完整性。
#### 二、Spring事务传播行为概述 事务传播行为定义了当一个事务方法被另一个事务方法调用时,如何处理事务的行为。以下是Spring定义的七种事务传播行为: 1. **PROPAGATION_REQUIRED** - **含义**:表示当前方法...
通过上述分析,我们可以看出Spring中的事务传播行为提供了丰富的选项,可以帮助开发者精确地控制事务的执行逻辑。正确理解和运用这些传播行为对于实现健壮、高效的事务管理至关重要。在实际开发中,应根据业务需求...
### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...
本篇将基于"Spring事务传播Demo"来深入探讨Spring事务管理和传播行为。 首先,我们需要理解什么是事务。在数据库操作中,事务是一组操作,这些操作要么全部执行,要么全部不执行,以确保数据的一致性和完整性。在...
为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细介绍 Spring 的几种事务传播特性: 1. **PROPAGATION_REQUIRED** - **定义**:如果当前存在事务,则加入该事务;如果当前没有...
Spring通过`@Transactional`注解可以方便地设置事务传播行为和隔离级别,例如: ```java @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED) public void ...
【Spring事务传播行为详解】 在Spring框架中,事务管理是其核心特性之一,它使得开发者能够在应用程序中实现数据库操作的事务一致性。事务传播行为是指在一个事务方法被另一个事务方法调用时,如何处理这两个方法...
### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...
#### 二、Spring事务传播行为详解 Spring中的事务传播行为定义了当一个方法被另一个方法调用时,应该如何处理事务。Spring定义了以下几种不同的传播行为: 1. **PROPAGATION_REQUIRED**: - 如果当前存在事务,则...
Spring事务传播属性是这一机制的关键组成部分,它定义了在一个事务方法被另一个事务方法调用时,应该如何处理事务的边界。在深入理解Spring事务传播属性之前,我们首先需要了解Spring中的事务管理模型,包括编程式...
5. **事务传播行为**:Spring提供了七种事务传播行为,如REQUIRED(默认)、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED,它们决定了事务如何在方法调用之间传播。 时序图是一种UML建模工具...
这是Spring中最常用的传播行为。 2. **Propagation_Supports**:如果当前存在事务,则继续使用该事务;如果没有,则以非事务的方式继续执行。 3. **Propagation_Mandatory**:如果当前存在事务,则继续使用该事务...
2. **Spring事务传播行为**: - `REQUIRED`:默认设置,如果当前存在事务,则加入该事务;如果不存在,就新建一个事务。 - `SUPPORTS`:如果当前存在事务,则支持;如果不存在,事务就不开始。 - `MANDATORY`:...
Spring 中事务传播行为的介绍 Spring 中事务传播行为是指在分布式事务系统中,事务的边界定义和传播规则。在 Spring 框架中,定义了 7 种不同的传播行为,每种行为都有其特点和应用场景。 1. PROPAGATION_...