Spring 的事务传播机制

Spring 的事务传播机制定义了一个事务方法在遇到已经存在的事务时如何处理。事务传播属性(Propagation)提供了七种机制,以适应不同的业务需求和事务边界管理。

1. Spring 的事务传播机制的类型

(1)REQUIRED(默认传播机制)
  • 描述:如果当前存在事务,则加入该事务;如果没有,则创建一个新事务。
  • 应用场景:适用于大多数情况,因为它遵循“有事务则加入,无事务则创建”的逻辑。
(2)REQUIRES_NEW
  • 描述:无论当前是否存在事务,总是创建一个新事务,并且挂起当前事务(如果有)。
  • 应用场景:适合必须独立于现有事务的场景,比如在一个事务中写操作日志,不受外层事务回滚影响。
(3)SUPPORTS
  • 描述:如果当前存在事务,则加入该事务;如果没有,则以非事务方式执行。
  • 应用场景:适合既可以在事务内执行,也可以在事务外执行的查询操作。
(4)MANDATORY
  • 描述:如果当前存在事务,则加入该事务;如果没有,则抛出异常。
  • 应用场景:适合必须在事务内执行的场景,确保调用方已开启事务。
(5)NOT_SUPPORTED
  • 描述:以非事务方式执行操作,如果当前存在事务,则挂起该事务。
  • 应用场景:适合不需要事务控制,且不希望受到其他事务影响的场景。
(6)NEVER
  • 描述:以非事务方式执行操作,如果当前存在事务,则抛出异常。
  • 应用场景:适合必须在无事务环境中运行的场景。
(7)NESTED
  • 描述:如果当前存在事务,则在嵌套事务中执行;如果没有,则创建一个新事务。
  • 应用场景:适合需要在一个主事务中划分子事务的情况。嵌套事务可以单独回滚而不影响外层事务。

2. 事务传播机制的实现原理

Spring 的事务传播机制基于 AOP(面向切面编程)和事务管理器(如 DataSourceTransactionManager)实现。在调用事务方法时,Spring 会检查当前上下文中是否存在活动事务,并根据传播机制决定如何处理事务。

工作原理:
  1. AOP 拦截方法调用:当调用一个带有 @Transactional 注解的方法时,Spring AOP 会拦截该方法。

  2. 获取事务上下文:Spring 会通过事务管理器检查当前上下文中是否已经存在事务。

  3. 事务管理器检查事务传播属性:根据传播机制的不同,Spring 决定如何处理当前事务:

    • 如果是 REQUIRED,则加入当前事务或创建新事务。
    • 如果是 REQUIRES_NEW,则挂起当前事务,创建一个新事务。
    • 其他机制类似。
  4. 事务同步:Spring 事务管理器会与底层的资源(如数据库连接)同步,确保所有操作在同一事务中执行,保证一致性。

  5. 提交或回滚:根据方法的执行情况,Spring 事务管理器会在方法结束时决定是否提交或回滚事务。如果发生异常,事务管理器根据异常类型和回滚策略进行回滚。

事务传播的边界管理

通过事务管理器,Spring 可以精确控制事务的生命周期,传播机制用于在嵌套调用和复杂业务逻辑中实现更细粒度的事务边界管理,确保事务逻辑与业务需求一致。

3. 常见的应用场景和注意事项

  • 默认使用 REQUIRED:对于绝大多数情况,使用 REQUIRED 是足够的,特别是对于一个整体业务逻辑的开始方法。
  • 日志记录使用 REQUIRES_NEW:日志或审计记录通常使用 REQUIRES_NEW,确保不受外层事务的回滚影响。
  • 避免事务嵌套死锁:对于使用 NESTED 事务的嵌套场景,尽量确保嵌套事务资源不与外层事务资源冲突,避免死锁。

总结来说,Spring 事务传播机制为开发者提供了灵活的事务边界管理,适应各种业务需求。通过传播机制,开发者可以根据业务需求确保操作的原子性和隔离性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uv sync失败HTTP status server error (504 Gateway Timeout) for url (http://...)

内网环境下,服务器Linux系统可以正常uv sync更新和安装依赖,本地电脑Windows系统却总是报错,大致错误信息如下: error: Failed to download: xxxCaused by: HTTP status server error (504 Gateway Timeout) for url (http://...…

豆瓣同城活动采集-过去一年到未来已定档活动

通过采集豆瓣同城活动,来辅助分析一个城市的文商旅体活跃繁荣程度。 以成都为例,2023年10月30日到2024年11月未来已定档活动期间,豆瓣同城活动共有975场。 示例数据: 活动网址:有,此处不显示 封图网址&…

海量数据面试题

⭐️前言⭐️ 本篇文章主要针对在面试时可能涉及到的海量数据的面试题,该类型面试题常常考虑通过位图、布隆过滤器或者哈希的方式来解决。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何…

pytorh学习笔记——cifar10(九)使用torhvision的标准resnet模型

之前的demo都是模仿和简化了已有的模型,也可以直接调用orhvision的标准模型,代码将更加简单。 新建resnet18.py import torch.nn as nn from torchvision import modelsclass ResNet18(nn.Module):def __init__(self, num_classes10):super(ResNet18, …

JavaScript 前端开发

JavaScript 前端开发是现代 Web 开发的重要组成部分。它涉及到使用 JavaScript 语言来创建动态的、交互式的网页应用。随着技术的发展,JavaScript 不仅限于浏览器中的脚本编写,还可以用于服务器端开发(如 Node.js)、移动应用开发&…

json与python中字典的互相转化

json的定义 JSON (JavaScript Object Notation) ,是一种轻量级的数据交换格式。它的使用范围很广,并成为 ECMA 标准,可以被使用在多种编程语言中,用于前后端之间的数据传输、存储和交换数据。可以说是“用…

如何快速分析音频中的各种频率成分

从视频中提取音频 from moviepy.editor import VideoFileClip# Load the video file and extract audio video_path "/mnt/data/WeChat_20241026235630.mp4" video_clip VideoFileClip(video_path)# Extract audio and save as a temporary file for further anal…

Rust 力扣 - 5. 最长回文子串

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 从中心点先寻找和中心点相等的左右端点,在基于左右端点进行往外扩散,直至左右端点不相等或者越界,然后左右端点这个范围内就是我们找寻的回文串,我们遍历中心点&am…

在Java中,需要每120分钟刷新一次的`assetoken`,并且你想使用Redis作为缓存来存储和管理这个令牌

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…

HarmonyOS“一次开发,多端部署”

目录 一、核心概念与目标 二、开发基础问题与解决思路 (一)基础问题 (二)解决思路 三、应用开发流程与示例 四、工程管理具体操作 五、应用 UX 设计通用规则与考虑因素 一、核心概念与目标 定义:一套代码工程&…

Netty的简介与实战

Netty简介 一、背景与来源 Netty最初是由JBOSS提供的一个Java开源框架,现在已成为Github上的独立项目。它基于Java的NIO(New Input/Output)模型,提供了简单而强大的抽象,使得网络编程变得更加容易和高效。 二、特点…

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式,然后能在虚拟机上用,最起码新版的macOS镜像是不能用UltraISO,dmg2iso这种软件了,你直接转放到VMware里绝对读不出来,办法就是,在Mac系统中转换为cdr,然后再转成iso&am…

Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动

前言:上一篇实现了角色简单的移动控制,但是实际游戏中玩家的视角是可以转动的,并根据转动后视角调整移动正前方。本篇实现玩家第一人称视角转动和移动,觉得有帮助的话可以点赞收藏支持一下! 玩家第一人称视角 修复小问…

mysql 十把锁之《小猫钓鱼》

元数据锁:在这个美丽的森林里,小猫们决定要把钓鱼的成果记录下来。于是,它们首先需要创建一个 “鱼表” 来存放钓鱼的信息。当开始创建鱼表的时候,数据库自动为这个表加上了元数据锁。这个锁是为了防止在表的结构定义等元数据被修…

NAT技术和代理服务器

NAT IP原理 之前我们讨论了, IPv4协议中, IP地址数量不充足的问题 NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:很多学校, 家庭, 公司内部采用每个终端设置私有…

学习力体系

一、故事引入 在一个小镇上,有一位年轻的学者小明,梦想成为一名科 学家。然而,他总是感到学习困难,知识无法长久保持。有一天,他遇到了一位智者,智者告诉他:“学习的力量能够改变命运。”小明意…

批处理操作的优化

原来的代码 Override Transactional(rollbackFor Exception.class) public void batchAddQuestionsToBank(List<Long> questionIdList, Long questionBankId, User loginUser) {// 参数校验ThrowUtils.throwIf(CollUtil.isEmpty(questionIdList), ErrorCode.PARAMS_ERR…

013:无人机航线规划的概念

摘要&#xff1a;航线规划是无人机任务规划的核心环节&#xff0c;它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素&#xff0c;包括飞行时间、飞行距离、能源消耗、飞行安全等。。 一、概述 1. 概念与目标 无人机航线规划&#xff0c;是指在特定任…

2023IKCEST第五届“一带一路”国际大数据竞赛--社交网络中多模态虚假 媒体内容核查top11

比赛链接&#xff1a;https://aistudio.baidu.com/competition/detail/1030/0/introduction PPT链接&#xff1a;https://www.ikcest.org/bigdata2024/zlxz/list/page.html 赛题 社交网络中多模态虚假媒体内容核查 背景 随着新媒体时代信息媒介的多元化发展&#xff0c;各种内容…

GitHub Star 数量前 5 的开源应用程序生成器

欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过&#xff1a;在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目&#xff01;&#…