Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
在使用过程中需要注意以下几点:
1)NESTED和NEW的区别
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED是容易混淆的两个传播行为。PROPAGATION_REQUIRES_NEW 启动一个新的、和外层事务无关的“内部”事务。该事务拥有自己的独立隔离级别和锁,不依赖于外部事务,独立地提交和回滚。当内部事务开始执行时,外部事务 将被挂起,内务事务结束时,外部事务才继续执行。由此可见, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于:PROPAGATION_REQUIRES_NEW 将创建一个全新的事务,它和外层事务没有任何关系,而 PROPAGATION_NESTED 将创建一个依赖于外层事务的子事务,当外层事务提交或回滚时,子事务也会连带提交和回滚。嵌套事务不能够提交,它必须通过外层事务来完成提交的动作,外层事务的回滚也会造成内部事务的回滚。
2) 当方法被设置为PROPAGATION_NOT_SUPPORTED时,外层业务方法的事务会被挂起,当内部方法运行完成后,外层方法的事务重新运行。如果外层方法没有事务,直接运行,不需要做任何其它的事。
3) 当业务方法被设置为PROPAGATION_NEVER时,它将不能被拥有事务的其它业务方法调用。
4) 当业务方法被设置为PROPAGATION_MANDATORY时,它就不能被非事务的业务方法调用
分享到:
相关推荐
Spring事务传播类型.md
本文将详细介绍Spring框架中定义的七种不同的事务传播行为类型及其应用场景。 #### 二、事务传播行为概述 事务传播行为是指当一个事务方法被另一个事务方法调用时,如何处理这些事务的方法。Spring通过`...
事务隔离级别的选择和事务传播行为的设定,对于确保数据一致性至关重要。例如,如果你的应用需要绝对的数据一致性,可能会选择较高的隔离级别如SERIALIZABLE,但这也可能牺牲了系统的并发性能。反之,如果你更关心...
- `propagation`: 事务传播行为,如`REQUIRED`(默认)表示如果当前没有事务,则新建一个;`SUPPORTS`表示如果已有事务就加入,没有则不开启新事务等。 - `isolation`: 事务隔离级别,如`DEFAULT`(默认)遵循数据库...
### Spring事务的七大传播行为 ...总结来说,选择合适的事务传播行为和隔离级别对于确保应用程序的数据一致性至关重要。开发者需要根据业务需求权衡性能和数据一致性之间的关系,以选择最合适的设置。
2. **事务传播行为**: 事务的传播行为定义了在一个事务方法被另一个事务方法调用时,如何处理新的事务上下文。在Spring中,通过`<tx:advice>`标签来配置。例如: ```xml *" propagation="REQUIRED"/> ... ...
当Bean的方法中又调用了另一个Bean的方法时,那么此时事务传播是如何进行的?事务传播的机制可以确保事务的一致性和完整性。 JPA的事务管理是指对一系列操作的管理,包括创建、读取、更新和删除等操作。JPA提供了两...
事务传播行为是指在一个事务方法被另一个事务方法调用时,如何处理新方法的事务边界。Spring定义了七种事务传播行为: 1. REQUIRED:默认设置,如果当前存在事务,则加入该事务;如果没有,则创建一个新的事务。 2. ...
`@Transactional`可以设置不同的属性,如`propagation`(传播行为)、`isolation`(隔离级别)、`rollbackFor`(触发回滚的异常类型)等。下面是一个声明式事务的例子: ```java @Service public class UserService...
5. **事务传播行为**:Spring提供了七种事务传播行为,如REQUIRED(默认)、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED,它们决定了事务如何在方法调用之间传播。 时序图是一种UML建模工具...
它支持多种事务传播行为(如 PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW 等),可以根据不同的业务场景灵活配置事务的范围。此外,Spring 还提供了事务回滚规则,允许基于异常类型或异常实例来决定是否回滚...
1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、Hibernate、MyBatis等)配置相应的事务管理器。 2. 开启事务:使用`@Transactional`注解标记需要在事务中执行的方法。 3. 业务逻辑:在事务中...
Spring的事务管理还提供了强大的事务传播行为和隔离级别配置,开发者可以根据业务需求来设置事务如何在多个方法调用之间传播,以及事务之间的隔离程度,保证数据的一致性和隔离性。 在实际应用中,Spring事务管理的...
这段代码配置了一个事务管理器,并定义了一个事务顾问(`tx:advice`),该顾问指定了不同方法名前缀对应的不同事务传播行为。例如,所有以`save`开头的方法都将使用`REQUIRED`传播行为,这意味着如果当前存在事务,...
此外,我们还可以使用`@Transactional`注解在方法级别声明事务属性,如 propagation(传播行为)、isolation(隔离级别)、timeout(超时时间)和rollbackFor(回滚异常类型)。 3. 事务的传播行为: 传播行为决定...
- **属性**:注解有多个属性,如`value`(指定事务管理器)、`propagation`(事务传播行为)、`isolation`(隔离级别)、`rollbackFor`(触发回滚的异常类型)等。例如,`@Transactional(value="transactionManager...
3. **事务传播行为**:PROPAGATION_REQUIRED是默认的事务传播行为,表示如果当前存在事务,则加入该事务;如果不存在,则新建一个事务。 4. **异常回滚规则**:"-java.lang.Exception"表示如果方法抛出任何类型的...
5. **事务传播行为**: 当一个事务方法被另一个事务方法调用时,需要考虑事务的传播行为。Spring提供了七种不同的传播行为,例如`PROPAGATION_REQUIRED`(默认,如果当前存在事务则加入,否则新建)、`PROPAGATION_...
事务管理的类型 Spring 中的事务管理可以分为两种:编程式事务管理和声明式事务管理。编程式事务管理是指通过编程的方式来管理事务,而声明式事务管理是指通过配置的方式来管理事务。 事务管理的隔离级别 Spring ...