springboot的事务传播机制

Spring Boot 中的事务传播机制用于处理多个事务方法之间相互调用时的事务行为,确保数据的完整性和一致性

传播行为介绍

传播行为 描述
Propagation.REQUIRED 默认值。如果当前存在事务,则加入该事务;如果不存在事务,则创建一个新事务。
Propagation.SUPPORTS 如果当前存在事务,则加入该事务;如果不存在事务,则以非事务方式运行。
Propagation.MANDATORY 如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。
Propagation.REQUIRES_NEW 创建一个新事务,如果当前存在事务,则将当前事务挂起。
Propagation.NOT_SUPPORTED 以非事务方式运行,如果当前存在事务,则将当前事务挂起。
Propagation.NEVER 以非事务方式运行,如果当前存在事务,则抛出异常。
Propagation.NESTED 如果当前存在事务,则创建一个嵌套事务;如果不存在事务,则等价于 Propagation.REQUIRED。

说明

假设有两个方法 A 和 B,其中 A 调用了 B,并且它们都使用了 @Transactional 注解,以下是不同传播行为下的事务处理方式:
Propagation.REQUIRED:如果 A 有事务,B 将使用 A 的事务;如果 A 没有事务,B 将创建一个新事务。
Propagation.SUPPORTS:如果 A 有事务,B 将加入 A 的事务;如果 A 没有事务,B 将以非事务方式运行。
Propagation.MANDATORY:如果 A 没有事务,B 将抛出异常。
Propagation.REQUIRES_NEW:无论 A 是否有事务,B 都将创建一个新事务,并将 A 的事务挂起。
Propagation.NOT_SUPPORTED:无论 A 是否有事务,B 都将以非事务方式运行,并将 A 的事务挂起。
Propagation.NEVER:如果 A 有事务,B 将抛出异常;否则 B 以非事务方式运行。
Propagation.NESTED:如果 A 有事务,B 将创建一个嵌套事务;如果 A 没有事务,B 将创建一个新事务。
使用场景
Propagation.REQUIRED:适用于大多数场景,确保方法调用链中的事务一致性。
Propagation.SUPPORTS:适用于读操作,减少事务开销。
Propagation.REQUIRES_NEW:适用于需要独立事务的场景,例如日志记录。
Propagation.NESTED:适用于需要嵌套事务的场景,例如复杂的业务流程。
通过合理选择事务传播行为,可以更好地控制事务的边界和行为,确保应用程序的事务管理更加灵活和高效。

示例

在 Spring Boot 中,可以通过在方法上使用 @Transactional 注解来设置事务传播行为。@Transactional 注解提供了多个属性用于配置事务,其中 propagation 属性用于指定事务传播行为。
设置事务传播行为的步骤

1. 添加 @Transactional 注解

在需要管理事务的方法上添加 @Transactional 注解,并通过 propagation 属性指定传播行为。

2. 指定传播行为

propagation 属性的值是 Propagation 枚举类型,可以选择以下值之一:
Propagation.REQUIRED(默认值)
Propagation.SUPPORTS
Propagation.MANDATORY
Propagation.REQUIRES_NEW
Propagation.NOT_SUPPORTED
Propagation.NEVER
Propagation.NESTED

3. 示例代码

以下是一个示例代码,展示如何设置不同的事务传播行为:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值