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自动化平台 无需编码即可拥有自己的…...
ACUPS电源的技术指标怎么看?搞懂这几个参数,选型不踩坑
买ACUPS(交流不间断电源)时,说明书上一堆技术参数让人眼花缭乱。其实,搞懂输入指标和输出指标这两大类,就能判断一台ACUPS的性能好坏。下面用大白话给你讲清楚。一、输入指标:ACUPS“吃”电的本事输入指标决…...
终极音乐解锁指南:3步免费解锁任何加密音乐文件
终极音乐解锁指南:3步免费解锁任何加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://git…...
【RAG】【query_engine01】多文档自动检索分析
1. 案例目标 本案例展示了如何实现结构化分层检索(Structured Hierarchical Retrieval),这是一种处理多文档RAG(检索增强生成)的高级架构。该架构能够根据用户查询动态选择相关文档,然后再从这些文档中选择相关内容。 主要目标包括: 演示如…...
Axure RP中文语言包技术深度解析:从键值对到国际化架构的工程实践
Axure RP中文语言包技术深度解析:从键值对到国际化架构的工程实践 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 在…...
ClawDrive:为AI智能体设计的语义文件管理与跨模态检索系统
1. 项目概述:ClawDrive,为AI智能体打造的“语义硬盘” 如果你和我一样,每天被海量的文档、图片、音频和视频文件淹没,传统的文件夹分类和文件名搜索早已力不从心。更头疼的是,当你尝试让AI助手(比如Claude…...
LTE标准下Turbo码编译码仿真
一、Turbo码编码原理与结构编码架构 LTE Turbo码采用并行级联卷积码(PCCC) 结构,包含两个递归系统卷积码(RSC)编码器和一个伪随机交织器(QPP)。 RSC编码器:生成率1/2的校验序列&…...
n8n与Claude集成指南:构建AI代码生成与自动化执行工作流
1. 项目概述与核心价值最近在折腾自动化工作流时,我偶然发现了一个名为n8n-claude-code-guide的开源项目。这个项目乍一看名字,你可能以为它只是一个简单的代码指南,但深入探究后,你会发现它实际上是一个将两个强大的工具——n8n和…...
手把手教你给天邑TY1608机顶盒刷机(S905L3B芯片,支持RTL8822CS/MT7668无线模块)
天邑TY1608机顶盒刷机全攻略:从零开始玩转S905L3B芯片 第一次拿到天邑TY1608机顶盒时,你可能被它原厂系统的各种限制所困扰——预装软件无法卸载、广告弹窗频繁出现、存储空间严重不足。这款搭载Amlogic S905L3B芯片的设备,配合RTL8822CS或MT…...
VS2019编译OpenSceneGraph 3.6.5踩坑全记录:从CMake配置到解决第三方库缺失
VS2019编译OpenSceneGraph 3.6.5实战避坑指南 第一次在Windows平台用VS2019编译OpenSceneGraph 3.6.5时,我原以为按照官方文档就能轻松搞定。直到CMake报出一连串第三方库缺失的红色警告,才意识到这趟编译之旅远没有想象中简单。如果你也正对着Could NOT…...
手把手教你用FPGA+CORDIC算法实现任意角度图像旋转(告别浮点运算)
FPGACORDIC算法实现高精度图像旋转的硬件优化实践 在数字图像处理领域,实时图像旋转是一项基础而关键的技术需求。传统基于浮点运算的旋转方案虽然直观,但在FPGA等硬件平台上往往面临资源占用高、时序难以满足的挑战。本文将深入探讨如何利用CORDIC&…...
