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. 示例代码
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {// ...
}@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {// ...
}
6. 注意
- 事务传播机制只对方法级别的事务生效,不影响类级别的事务。
- 如果没有明确指定事务传播行为,则默认为 Propagation.REQUIRED。
相关文章:
Spring Boot 事务传播机制详解
Spring Boot 事务传播机制详解 1. 事务传播机制概述 Spring Boot 中的事务传播机制用于处理多个事务方法之间相互调用时的事务行为,保证数据的完整性和一致性。当务传播机制定义了在调用一个事务方法时,当前事务该如何传播或传递。Spring Boot 中的事务…...
【机器学习】生成对抗网络 (Generative Adversarial Networks | GAN)
生成对抗网络 (Generative Adversarial Networks | GAN) 介绍 生成对抗网络 (Generative Adversarial Networks,简称GAN) 是一种强大的深度学习模型,用于生成具有逼真感的图像、音频和文本等内容。GAN 的核心理念是通过训练两个神经网络,生…...

[ADS信号完整性分析]深入理解IBIS AMI模型设计:从基础到实践
在高速数字设计领域,信号完整性(SI)分析对于确保系统性能至关重要。IBIS AMI(Algorithmic Model Interface)模型作为一种强大的工具,能够帮助设计师在系统层面上评估和优化SERDES(串行器/解串器…...

Plotly : 超好用的Python可视化工具
文章目录 安装:开始你的 Plotly 之旅基本折线图:简单却强大的起点带颜色的散点图:数据的多彩世界三维曲面图:探索数据的深度气泡图:让世界看到你的数据小提琴图:数据分布的优雅展现旭日图:分层数…...

Linux电话本的编写-shell脚本编写
该电话本可以实现以下功能 1.添加用户 2.查询用户 3.删除用户 4.展示用户 5.退出 代码展示: #!/bin/bash PHONEBOOKphonebook.txt function add_contact() { echo "Adding new contact..." read -p "Enter name: " name …...
蓝牙开发 基础知识
零、基础知识 0.1、Android 应用可通过 Bluetooth API 执行以下操作 扫描其他蓝牙设备查询本地蓝牙适配器的配对蓝牙设备建立 RFCOMM 通道通过服务发现连接到其他设备与其他设备进行双向数据传输管理多个连接 0.2、蓝牙进行通信的四大必需任务 设置蓝牙查找局部区域内的配对…...

QNX 7.0.0开发总结
1 QNX编译 1.1 基本概念 QNX可以直接使用Linux Makefile编译库和二进制,在Makefile文件中指定CCaarch64-unknown-nto-qnx7.0.0-g,或者CCx86_64-pc-nto-qnx7.0.0-g,保存退出后,运行source /qnx_sdk_path/qnxsdp-env.sh,…...

Golang使用讯飞星火AI接口
一、API申请 https://www.bilibili.com/video/BV1Yw411m7Rs/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 注册申请,需要在此页面获取appid、apisecret、apikey https://www.xfyun.cn/ https://console.xfyun.cn/ser…...
矫正儿童发音好帮手
《言语构音语音训练手册——下颌、唇部、舌部构音运动障碍》教辅书 儿童言语构音语音问题越来越受到家长的关注,大多数家长受到儿童说话晚、口齿不清、发音错误等问题的困扰,国外报道2岁儿童言语构音语音障碍达到17%,3岁达4%~7.5%࿰…...

wordpress主题导航主题v4.16.2哈哈版
1.下载授权接口源码onenav-auth-api-v2.zip ,在宝塔新建一个网站,域名为 auth.iotheme.cn,设置wordpress伪静态,申请ssl证书。将上面源码解压后上传到此网站根目录。 2. 在宝塔根目录etc下 hosts 中添加 127.0.0.1 auth.iotheme.…...
内存分布图
1.基本数据类型和常量存放在常量池中。 2.类的成员存放在堆中,如果成员是其他类对象也存放在堆中 3.数组和数组的内容放在堆中 4.类对象存放在栈中。 5.单独的对象存放在栈中。 6.引用数据类型存放在堆或栈中。 Java中对象到底存在堆中还是栈中_java对象在堆还…...
如何发布自己的NPM插件包?
安装 Node.js : 如果没有安装的,Nodejs下载安装:http://nodejs.cn/download/ 首先确保你已经安装了 Node.js 和 npm。你可以通过运行以下命令来检查是否已经安装: node -v npm -v初始化项目: 创建一个新的项目文件夹…...
计算广告读书杂记-待整理
不知不觉已经在字节干了两年多广告研发,也跳槽去了一家广告公司继续深耕,借着这个劲,重新读一遍《计算广告》这本书,并将一些重点概念进行记录。...

No module named _sqlite3解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

防飞单,赢市场:售楼处客流统计管理新篇章
在竞争激烈的房地产市场中,售楼处作为楼盘销售的重要窗口,其管理效率和服务质量直接关系到楼盘的销售业绩和品牌形象。然而,传统的客户人数统计方式往往存在诸多不足,如数据不准确、统计效率低下等,这些问题给售楼处的…...

LeetCode:419. 甲板上的战舰(遍历 Java)
目录 419. 甲板上的战舰 题目描述: 实现代码与解析: 遍历 原理思路: 419. 甲板上的战舰 题目描述: 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 X 或者是一个空位 . &…...

【python】OpenCV—Blob Detection(11)
学习来自OpenCV基础(10)使用OpenCV进行Blob检测 文章目录 1、cv2.SimpleBlobDetector_create 中文文档2、默认 parameters3、配置 parameters附录——cv2.drawKeypoints 1、cv2.SimpleBlobDetector_create 中文文档 cv2.SimpleBlobDetector_create 是 O…...
【C++】 基础复习 | 数据类型,输入,输出流 scanf printf
文章目录 1 基本数据类型1.1 基本数据类型1.2 构造类型1.3 指针类型(Pointers) 2 基础输入输出2.1 通过输入输出操作符>> <<2.2 通过scanf和printf输入和输出2.2.1 输出printf 函数2.2.2 输出scanf 函数2.2.3 注意事项 1 基本数据类型 了解…...

linux pxe和无人值守
一 PXE和无人值守 pxe c/s模式 允许客户端通过网络从远程服务器(服务端)下载引导镜像 加载安装文件 实现自动化安装操作系统 无人值守 就是安装选项不需要认为干预 可以自动化实现 pxe的优点 1 规模化 同时装配多台服务器 20多 30台 2 自动化 …...

Questflow借助MongoDB Atlas以AI重新定义未来工作方式
MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工,助力中小型初创企业自动化工作流程,简化数据分析,提升客户体验,推动AI与员工的协作,重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...