当前位置: 首页 > news >正文

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%&#xff0…...

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 指针类型&#xff08;Pointers&#xff09; 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模式 允许客户端通过网络从远程服务器&#xff08;服务端&#xff09;下载引导镜像 加载安装文件 实现自动化安装操作系统 无人值守 就是安装选项不需要认为干预 可以自动化实现 pxe的优点 1 规模化 同时装配多台服务器 20多 30台 2 自动化 …...

Questflow借助MongoDB Atlas以AI重新定义未来工作方式

MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工&#xff0c;助力中小型初创企业自动化工作流程&#xff0c;简化数据分析&#xff0c;提升客户体验&#xff0c;推动AI与员工的协作&#xff0c;重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…...

别再瞎猜了!YOLOv8 模型缩放(width_multiple)与通道计算(c1,c2)的完整逻辑

YOLOv8模型通道计算与宽度系数的工程化实践指南 在移动端部署YOLOv8模型时&#xff0c;许多工程师会遇到一个典型困境&#xff1a;明明按照官方文档调整了width_multiple参数&#xff0c;却发现模型要么计算量超出预期&#xff0c;要么精度断崖式下跌。这背后其实隐藏着YOLOv8通…...

别再混淆了!FFmpeg提取AAC/H264流时常见的3个容器格式误区

别再混淆了&#xff01;FFmpeg提取AAC/H264流时常见的3个容器格式误区 第一次用FFmpeg提取音频时&#xff0c;我把.m4a文件直接重命名为.aac&#xff0c;结果播放器报错——这个看似简单的操作背后&#xff0c;隐藏着容器格式与编码格式的深层差异。本文将用真实踩坑案例&#…...

RBD_Timer:嵌入式轻量级多定时器时间轮调度框架

1. RBD_Timer 库深度解析&#xff1a;面向嵌入式实时系统的轻量级多定时器管理框架1.1 问题根源&#xff1a;Arduino 原生delay()与中断阻塞对实时性的破坏在 Arduino 生态中&#xff0c;delay()函数被广泛用于实现时间等待逻辑。然而其底层实现本质是忙等待&#xff08;busy-w…...

效率革命:设计师必备的Sketch批量命名神器RenameIt完全指南

效率革命&#xff1a;设计师必备的Sketch批量命名神器RenameIt完全指南 【免费下载链接】RenameIt Keep your Sketch files organized, batch rename layers and artboards. 项目地址: https://gitcode.com/gh_mirrors/re/RenameIt 在现代UI/UX设计流程中&#xff0c;保…...

The Dark Art of Low-Light Enhancement: Why Retinex Models Don’t Need Handcrafted Priors Anymore

无先验约束的Retinex模型&#xff1a;PairLIE如何重塑低光增强技术范式 1. 低光增强的技术演进与当前挑战 在计算摄影领域&#xff0c;低光图像增强&#xff08;Low-light Image Enhancement, LIE&#xff09;一直是核心难题之一。传统方法主要依赖手工设计的先验知识&#xff…...

ArXiv:为何大模型无法拥有意识|Erik Hoel

导语当AI能流畅谈论“自我感受”&#xff0c;当Anthropic赋予Claude“对话退出权”&#xff0c;我们是否可以说它有意识&#xff1f;2026年初&#xff0c;神经科学家Erik Hoel在ArXiv发布论文《大语言模型意识证伪&#xff1a;持续学习对意识存在的必要性》&#xff08;A Dispr…...

用过才敢说 AI论文平台测评:2026年最值得尝试的几款工具

2026年真正好用的AI论文平台&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

在 React 中,useRef、ref 属性以及 forwardRef 是处理“引用”(访问 DOM 节点或组件实例)的核心概念

在 React 中&#xff0c;useRef、ref 属性以及 forwardRef 是处理“引用”&#xff08;访问 DOM 节点或组件实例&#xff09;的核心概念。它们经常一起使用&#xff0c;但职责完全不同。以下是它们的核心区别、使用方法及组合示例&#xff1a;1. 核心概念与区别特性ref (属性)u…...

Python开发环境搭建新选择:Miniconda-Python3.11镜像体验

Python开发环境搭建新选择&#xff1a;Miniconda-Python3.11镜像体验 1. 为什么选择Miniconda-Python3.11镜像 Python作为当今最流行的编程语言之一&#xff0c;其版本管理和环境隔离一直是开发者面临的挑战。传统的Python安装方式往往会导致&#xff1a; 系统Python版本与项…...

3分钟解决机械键盘连击问题:终极开源修复工具完整指南

3分钟解决机械键盘连击问题&#xff1a;终极开源修复工具完整指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经遇到过这样…...