Spring的事务详解

news2024/11/17 22:39:48

Spring的事务详解

在这里插入图片描述

一,什么是Spring事务

Spring 事务是 Spring 框架提供的一种对事务进行管理的机制。在使用 Spring 事务时,可以通过注解或编程方式将需要进行事务管理的方法和代码块标记为事务性操作,当这些操作被执行时,Spring 会负责开启、提交或回滚数据库事务,以保证在多个操作之间的一致性。

Spring 事务的特点包括:

  1. 声明式事务:支持使用注解或 XML 配置来声明事务,让代码更加简洁和易于维护。 注解@Transactional
    在这里插入图片描述

  2. 编程式事务:同时还支持使用编程的方式来管理事务,更加灵活。TransactionTempale

在这里插入图片描述

  1. 多种传播行为设置:可以设置事务在什么样的情况下应该加入到当前事务中,以及何时应该新建一个事务。

  2. 多种隔离级别:可以设置事务的隔离级别,以控制不同事务之间的可见性。

  3. 异常处理:可以配置事务应该如何处理异常,包括是否回滚等。

Spring 事务的实现是基于 AOP(面向切面编程)的技术,将事务管理与业务逻辑分离,使得事务管理更加简单和高效。同时,Spring 事务还提供了对多个数据库事务进行管理的支持,能够确保在多个数据库之间进行操作时,保证整个事务的一致性。

总之,Spring 事务是一种非常实用和高效的数据库事务管理机制,具有灵活、高效、易于使用等优点,在企业级应用开发中得到了广泛应用。

二,事务四大特性

事务是数据库系统中用于确保数据一致性和完整性的重要概念。事务具有四大特性,通常被称为 ACID 特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

  1. 原子性(Atomicity):原子性表示一个事务中的所有操作要么全部成功完成并永久保存,要么全部失败并回滚到事务开始前的状态。事务被视为不可分割的最小执行单元,要么全部执行,要么全部不执行,不存在中间状态。如果事务在执行中发生错误,系统将撤销所有已执行的操作,回滚到事务开始前的状态,以确保数据的一致性。

  2. 一致性(Consistency):一致性表示事务将数据库从一个一致状态转变为另一个一致状态。在事务开始之前和结束之后,数据库的完整性约束应该得到满足。这意味着事务中的操作必须符合预先定义的规则和约束,以确保数据的有效性和正确性。

  3. 隔离性(Isolation):隔离性定义了多个并发事务之间彼此隔离的程度。隔离性确保每个事务在执行期间都能够独立地进行,而不会受到其他并发事务的干扰。事务应该表现得好像是在系统中独立执行,即使在多个事务同时执行的情况下,也不会相互影响。隔离级别可以配置,从而平衡并发性和数据一致性之间的关系。

  4. 持久性(Durability):持久性表示一旦事务提交,其所做的修改将永久保存在数据库中,并且对于任何系统故障或崩溃,数据都不会丢失。当事务成功提交后,系统需要确保已经将数据写入到持久存储介质(如磁盘)中,以便能够在系统恢复后重新加载。

这四个特性共同确保了事务的可靠性和效果,使得数据库系统能够处理并发操作,并保持数据的一致性和可靠性。在设计和实现数据库应用程序时,开发人员需要了解和应用这些特性,以确保数据的正确性和稳定性。

三,事物传播机制

在这里插入图片描述

Spring 的事务传播行为是使用于管理多个事务方法的一种策略。它定义了在一个事务方法被另一个事务方法调用时,事务应该如何进行传播和处理。

Spring 框架提供了七种事务传播行为:

  1. REQUIRED(默认值):如果当前存在事务,则加入到当前事务中,如果当前没有事务,则新建一个事务。这是最常用的传播行为,适合大多数情况。

  2. SUPPORTS:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则以非事务方式执行。适用于读取数据库操作。

  3. MANDATORY:要求当前必须存在事务,否则会抛出异常。

  4. REQUIRES_NEW:无论当前是否存在事务,都会新建一个事务,将当前事务挂起。适用于需要独立的、嵌套的事务。

  5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将其挂起。

  6. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。

  7. NESTED:如果当前存在事务,则在嵌套事务中执行。嵌套事务可以独立地提交或回滚,但它们依赖于外部事务,只有外部事务提交后才能生效。

事务传播行为允许开发人员根据业务需求精确地控制事务的边界和行为,确保在多个事务方法之间维护数据的一致性和完整性。通过合理选择事务传播行为,可以实现复杂的事务逻辑,并确保事务的正确执行和结果。需要根据具体的业务场景和需求来选择合适的传播行为。

四,spring 的事务隔离

在这里插入图片描述

Spring框架提供了多种事务隔离级别,可以通过配置来选择适合应用场景的隔离级别。事务隔离级别定义了事务并发执行时的可见性和互相影响程度。

以下是Spring框架支持的五种事务隔离级别:

  1. DEFAULT(默认值):采用底层数据库的默认隔离级别。对于大多数数据库来说,默认级别是Read Committed(已提交读),但具体取决于数据库的实现。

  2. READ_UNCOMMITTED(读取未提交数据):最低的隔离级别,允许一个事务读取另一个事务尚未提交的数据。可能会导致脏读、不可重复读和幻读的问题。

  3. READ_COMMITTED(读取已提交数据):要求一个事务只能读取到已经提交的数据。避免了脏读的问题,但仍然可能出现不可重复读和幻读的问题。

  4. REPEATABLE_READ(可重复读):要求一个事务在整个过程中多次读取同样的数据时,结果保持一致。避免了脏读和不可重复读的问题,但可能出现幻读的问题。

  5. SERIALIZABLE(串行化):最高的隔离级别,通过强制事务串行执行来避免脏读、不可重复读和幻读的问题。但这会降低并发性能,因为事务需要按照顺序逐个执行。

对于不同的应用场景,可以选择不同的事务隔离级别来平衡数据一致性和并发性能。如果应用程序需要更高的并发性能,可以选择较低的隔离级别,如READ_COMMITTED。如果数据的一致性要求更高,可以选择较高的隔离级别,如SERIALIZABLE。

除了事务隔离级别,Spring还提供了以下解决方案来处理更复杂的并发问题:

  1. 乐观锁(Optimistic Locking):通过版本号或时间戳等机制,在读取数据时不加锁,在更新数据提交时检查是否有其他事务已经修改过该数据。

  2. 悲观锁(Pessimistic Locking):在读取或更新数据时,使用锁机制将数据标记为不可修改状态,以防止其他事务对其进行操作。

  3. 分布式事务(Distributed Transaction):用于跨多个数据库或系统的事务管理,保证事务的一致性和隔离性。

通过选择合适的事务隔离级别和采用适当的解决方案,可以确保在并发操作中维护数据的一致性和完整性。这些技术和策略可以根据具体的业务需求来灵活应用。

五,Spring事务实现基本原理

Spring框架的事务管理是建立在标准的Java事务API(即JTA、JDBC或Hibernate)之上的。它提供了一个抽象层,隐藏了不同事务API的实现细节,为应用程序提供了一致的编程模型。

Spring框架使用代理模式来实现对事务的管理。当需要开启一个事务时,Spring将会创建一个代理对象并将其注入到目标对象中。在代理对象中,Spring利用事务切面来管理事务的生命周期,即在方法调用前后开启和提交/回滚事务,并进行相关的异常处理。

Spring框架支持两种代理模式:基于接口的代理和基于类的代理。基于接口的代理是采用JDK动态代理实现的,而基于类的代理是采用CGLIB实现的。

基于接口的代理只能代理实现了接口的类,而基于类的代理可以对任何类进行代理,但目标类必须至少有一个非final的方法才能被代理。因此,在可行的情况下,Spring倾向于使用基于接口的代理。

当使用基于类的代理时,Spring会为目标类生成一个子类,并在子类中添加事务切面逻辑。因此,代理对象实际上是目标类的子类对象。在使用基于类的代理时,需要注意原始目标类和代理类的生命周期问题。

总的来说,Spring框架通过代理模式和事务切面实现了对事务的统一管理,并且在不同的事务API(如JTA、JDBC或Hibernate)之间提供了一致的编程模型。同时,Spring还支持多种事务隔离级别和解决方案,可以根据具体的业务需求来调整事务行为。

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

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

相关文章

吴恩达:AI 智能体工作流

热门文章推荐: (1)《为什么很多人工作 3 年 却只有 1 年经验?》(2)《一文掌握大模型提示词技巧:从战略到战术巧》(3)《AI 时代,程序员的出路在何方&#xff1…

人工智能上手 Pytorch

人工智能上手 Pytorch 1、人工智能框架历史走向 2015年, caffe,优势配置简单,缺点安装麻烦,且不更新维护 2016年,tensorflow 1.x,定义太严格,很复杂。开发成本高。简单的任务,也很…

360勒索病毒:变种360袭击了您的计算机?

引言: 随着科技的发展,网络安全问题变得日益突出,勒索病毒成为了当前网络威胁的一大主要形式之一。其中,360勒索病毒是近期备受关注的一种恶意软件。本文将介绍360勒索病毒的特点以及如何有效地应对此类威胁。如果受感染的数据确…

从三个维度看,你的企业是否需要引入精益管理咨询?

在快速变化的商业环境中,企业不断寻求提升自身运营效率和竞争力的方法。其中,精益管理作为一种追求卓越、消除浪费的管理理念,被越来越多的企业所认可。但是,如何判断自己的组织是否需要进行精益企业管理咨询呢?天行健…

I2C驱动实验:读取AP3216C设备中寄存器的数据

一. 简介 经过前面几篇文章的学习,已经完成了I2C驱动框架,字符设备驱动框架,编写了 读写 I2C设备中寄存器的数据的代码,文章如下: I2C驱动实验:实现读/写I2C设备寄存器的函数-CSDN博客 本文在此基础上&a…

Java | Leetcode Java题解之第14题最长公共前缀

题目: 题解: class Solution {public String longestCommonPrefix(String[] strs) {if (strs null || strs.length 0) {return "";}int minLength Integer.MAX_VALUE;for (String str : strs) {minLength Math.min(minLength, str.length…

加入酷开会员 酷开系统带你一起开启看电视的美好时光!

看电视对孩子和大人来说,都是有好处的。英国的《星期日泰晤士报》曾刊登报道:“看电视可以让小孩增长见闻,学习各种良好的社交和学习技巧,从而为他们今后的学习打下良好的基础。”而对于成年人来说,看电视也是一种娱乐…

Flutter开发进阶之错误信息

Flutter开发进阶之错误信息 在Flutter开发中错误信息通常是由Exception和Error表示,Error表示严重且不可恢复的错误,一般会导致程序直接终止,而Exception可以被显式抛出,一般为代码逻辑错误,根据Flutter的解释说Excep…

基于单片机放大电路程控放大特性参数设计

**单片机设计介绍,基于单片机放大电路程控放大特性参数设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机放大电路程控放大特性参数设计是一个结合了单片机编程和放大电路技术的综合性项目。以下是对该设计项目的概…

qgis加载天地图

一、点击Tile Server (XYZ),选择New Connection 二、在弹出的输入框中输入天地图的url 此处以影像底图为例,url为http://t0.tianditu.gov.cn/img_w/wmts?SERVICEWMTS&REQUESTGetTile&VERSION1.0.0&LAYERimg&STYLEdefault&TILEMATR…

浅析智能数据采集技术在数字化转型中的核心作用|电商数据采集API接口的核心应用

随着科技的飞速发展和全球化的深入推进,数字化转型已经成为企业和社会发展的必然趋势。在这一背景下,智能数据采集技术作为数字化转型的核心驱动力,正发挥着越来越重要的作用。本文将从智能数据采集技术的定义、特点、应用场景以及对企业的影…

京东云服务器幻兽帕鲁4核16G/8核32G配置价格和选择攻略

京东云幻兽帕鲁Palworld游戏多人联机服务器,配置可选4核16G、4核32G、8核32G、16C64G,京东云幻兽帕鲁服务器优惠价格26元1个月起,可购买1个月、3个月、6个月和一年时长,云服务器吧yunfuwuqiba.com整理京东云幻兽帕鲁服务器配置价格…

【话题】如何看待那些速成并精通软件书籍的神器

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 背景1. 神话与现实1.1 理论与实践之间的鸿沟1.2 一劳永逸的错觉 2. 速成书籍的优势与局限2.1 优势:2.2 局限: 3. 如何有效利用速成书籍3.1 量力而…

机器学习(五) -- 监督学习(3) -- 朴素贝叶斯

系列文章目录及链接 目录 前言 一、朴素贝叶斯通俗理解及定义 二、原理理解及公式 1、概率基础 2、贝叶斯公式 3、拉普拉斯平滑系数 三、**算法实现 四、接口实现 1、新闻数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、朴素贝叶…

芯课堂 | JScope虚拟示波器使用说明

​1. 首先需要安装Jlink的驱动,即安装JLink_Windows_V634e之后才能安装JScope,一般这个能正常使用Jlink下载、仿真说明你的Jlink驱动已经正常安装 2. 需要安装Jscope,即安装Setup_JScope_V611m,安装完成之后能看到以下画面 3. 新建…

TypeScript 泛型工具类型

文章目录 前言Partial(可选)代码解读 Readonly代码解读 Pick代码解读 Record代码解读 ---上面是常用的&#xff0c;下面是不常用的&#xff0c;需要的话往下看 ( 进阶 )---Required<T>&#xff1a;Required与Partial相反&#xff0c;作用是将所有属性变成必选属性&#x…

路径规划——曲线拟合详解(二):贝塞尔曲线、B样条曲线与QP优化( Fast-Planner算法核心部分)

1. 贝塞尔曲线 (1). 贝塞尔曲线的作用 贝塞尔曲线的作用是给定控制点&#xff0c;通过控制点生成对应的曲线进行轨迹拟合&#xff0c;输入为点&#xff0c;输出为受到控制点约束而产生的轨迹。 (2). 贝塞尔曲线的数学表达式 假设给定N个控制点&#xff0c;得到的为N-1阶的贝…

GA-SVM,基于GA遗传算法优化SVM支持向量机回归预测(多输入单输出)

基于遗传算法&#xff08;Genetic Algorithm, GA&#xff09;优化支持向量机&#xff08;Support Vector Machine, SVM&#xff09;用于回归预测是一个常见的任务。在这个任务中&#xff0c;我们使用GA来寻找SVM的最佳超参数配置&#xff0c;以最大化回归性能指标&#xff0c;例…

PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

&#x1f947;作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1 &#x1f525;本文已收录于Python系列专栏&#xff1a; 零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书合…

【Ambari】Ansible自动化部署大数据集群

目录 一&#xff0e;版本说明和介绍信息 1.1 大数据组件版本 1.2 Apache Components 1.3 Databases支持版本 二&#xff0e;安装包上传和说明 三&#xff0e;服务器基础环境配置 3.1global配置修改 3.2主机名映射配置 3.3免密用户名密码配置 3.4 ansible安装 四. 安…