Spring Boot 事务传播机制详解

Spring Boot 事务传播机制详解

1. 事务传播机制概述

  • Spring Boot 中的事务传播机制用于处理多个事务方法之间相互调用时的事务行为,保证数据的完整性和一致性。当务传播机制定义了在调用一个事务方法时,当前事务该如何传播或传递。Spring Boot 中的事务管理允许通过 @Transactional 注解来对方法进行事务管理,其中就包括事务传播机制的设置。下面将详细解释 Spring Boot 中常用的事务传播机制,希望以下的解释能帮助你更好地理解这些机制。

2. 传播行为类型

Spring Boot 支持 7 种事务传播行为,分别对应不同的事务处理策略:

传播行为 说明
PROPAGATION_REQUIRED 如果当前存在事务,则加入当前事务;如果不存在事务,则创建一个新的事务。
PROPAGATION_SUPPORTS 如果当前存在事务,则加入当前事务;如果不存在事务,则以非事务方式执行。
PROPAGATION_MANDATORY 如果当前存在事务,则加入当前事务;如果不存在事务,则抛出异常。
PROPAGATION_REQUIRES_NEW 始终创建一个新的事务,无论当前是否存在事务。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行,如果当前存在事务,则挂起当前事务。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则创建一个嵌套事务;如果不存在事务,则创建一个新的事务。

3. 图文解释

以下图文解释了 7 种事务传播行为:

3.1 PROPAGATION_REQUIRED

  • 场景:方法 A 和 B 都需要事务,B 依赖于 A 的结果。
  • 行为:B 会加入 A 的事务,如果 A 失败,B 也回滚。

3.2 PROPAGATION_SUPPORTS

  • 场景:方法 A 需要事务,B 可以选择是否需要事务。
  • 行为:B 会加入 A 的事务,如果 A 失败,B 也会回滚。如果 B 没有事务,则以非事务方式执行。

3.3 PROPAGATION_MANDATORY

  • 场景:方法 A 和 B 都需要事务,B 依赖于 A 的结果,且必须在一个事务内。
  • 行为:B 必须加入 A 的事务,如果 A 失败,B 也回滚。如果 A 没有事务,则抛出异常。

3.4 PROPAGATION_REQUIRES_NEW

  • 场景:方法 A 和 B 都需要事务,B 独立于 A,且必须在一个独立的事务内。
  • 行为:B 始终创建一个新的事务,无论 A 是否有事务,且 A 和 B 的结果互不影响。

3.5 PROPAGATION_NOT_SUPPORTED

  • 场景:方法 A 需要事务,B 不需要事务,且必须以非事务方式执行。
  • 行为:B 会以非事务方式执行,如果 A 失败,B 不会回滚。

3.6 PROPAGATION_NEVER

  • 场景:方法 A 和 B 都不能使用事务。
  • 行为:B 以非事务方式执行,如果 A 有事务,则抛出异常。

3.7 PROPAGATION_NESTED

  • 场景:方法 A 需要事务,B 依赖于 A 的结果,且需要在一个嵌套事务中。
  • 行为:B 会创建一个嵌套事务,如果 B 失败,则回滚 B 的事务,但不会影响 A 的事务。

4. 总结

选择合适的事务传播行为对于保证系统数据完整性和一致性非常重要。需要根据实际情况选择最适合的传播行为,确保事务的正确性。

5. 示例代码

java 复制代码
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
    // ...
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
    // ...
}

6. 注意

  • 事务传播机制只对方法级别的事务生效,不影响类级别的事务。
  • 如果没有明确指定事务传播行为,则默认为 Propagation.REQUIRED。
相关推荐
xujuzheng3 分钟前
2026深圳小程序/App/AI智能体开发公司选型指南(附本地服务商盘点)
数据库·科技·微信小程序·小程序·uni-app
RuoyiOffice6 分钟前
SpringBoot3+Vue3 项目立项到甘特:审批冻结台账、任务树怎么汇进度
spring boot·项目管理·vue3·甘特图·wbs·spring boot 3·立项审批
ruleslol8 分钟前
System Prompt(系统提示词) 的用法
java·ai
user_admin_god12 分钟前
第 03 篇:Java HttpClient 手写第一个 Chat 请求
java·人工智能·spring boot·语言模型
不剪发的Tony老师13 分钟前
DuckDB教程:常用文本函数
数据库·sql·数据分析·duckdb
ManageEngineITSM16 分钟前
什么是IT服务连续性管理?灾难恢复与业务连续性一文讲清
数据库·microsoft·工单系统·变更管理
西峰u20 分钟前
Java多线程从入门到线程安全
java·开发语言·jvm
像风一样自由202036 分钟前
29.Redis在大模型应用中有哪些用途缓存会话与限流
数据库·人工智能·redis·缓存·大模型·milvus·智能体
gis开发之家39 分钟前
Spring Boot 4 定时任务与异步线程池:从 @Scheduled 到高并发任务编排(生产级实战)
java·spring boot·后端·wpf·spring boot4
robottt6662 小时前
2026国产协作机器人排名与选型指南:越疆、遨博、节卡、珞石解析
大数据·数据库·人工智能