如何理解Spring事务

news2024/12/24 2:35:56

1 Spring事务是干什么的,解决了什么

Spring事务其实准备来讲叫Spring事务管理,拿mysql来说,事务已在其默认引擎innodb中实现了,我们是通过它提供的sql指令去开启事务、提交/回滚事务。

那么有的疑问是什么呢? 事务不是数据库去管理的吗为什么还需要Spring

数据库确实有自己的事务管理机制。然而,使用Spring事务管理的好处在于它提供了一种更加灵活和方便的方式来处理事务,特别是在大型应用程序中或者跨多个数据源的情况下。

数据库默认事务管理和代码事务管理是两种不同的事务管理方式,它们在实现和使用上有所不同。

1. 数据库默认事务管理:
   - 在数据库默认的事务管理中,事务是由数据库管理器自动启动和管理的
   - 通常情况下,每个 SQL 语句都被视为一个单独的事务,即每个语句都会被立即提交,除非显式地开启事务并在适当的时候提交或回滚事务。
   - 这种方式通常通过数据库的事务控制语句(如 `START TRANSACTION`、`COMMIT`、`ROLLBACK`)来实现,它们是由数据库提供的命令。

2. 代码层面去做事务管理而不是默认的处理方式:
你可以通过编程方式指定事务的开始、提交和回滚,而不是依赖于数据库的默认行为。

你可以显式地使用 START TRANSACTION 命令来开始一个事务,然后使用 COMMITROLLBACK 命令来提交或回滚事务。当你使用事务时,多个 SQL 语句可以作为一个原子操作一起执行作为一个事务(数据库默认的每个 SQL 语句都被视为一个单独的事务,这意味着它们要么全部执行成功提交,要么全部回滚。

   - 代码事务管理通常提供了更大的灵活性和控制力,允许你根据具体需求定义事务的范围、传播行为、隔离级别等属性。
   - Spring 框架就提供了强大的代码事务管理功能,可以通过注解或编程方式来定义事务,而不需要直接依赖于数据库的事务控制语句。

总的来说,数据库默认事务管理依赖于数据库的事务控制语句和默认行为,而代码事务管理通过编程语言或框架提供的功能来实现更灵活的事务管理。在选择使用哪种方式时,你可以根据具体情况和需求进行选择。

理解 Spring 事务需要从 Spring 框架对事务管理的支持入手。Spring 框架提供了一种简单而强大的方式来处理事务,同时隐藏了底层事务管理的复杂性。

以下是理解 Spring 事务的关键点:

1. 声明式事务管理 vs. 编程式事务管理:
   - Spring 支持声明式事务管理和编程式事务管理两种方式。
   - 声明式事务管理允许通过注解或 XML 配置来定义事务行为,将事务管理逻辑从业务逻辑中分离出来。
   - 编程式事务管理则允许在代码中直接控制事务的开启、提交和回滚。

2. 事务传播行为:
   - Spring 定义了多种事务传播行为,用于指定方法调用时事务的行为,如 REQUIRED、REQUIRES_NEW、NESTED 等。
   - 通过事务传播行为,你可以控制事务的范围和行为,以满足不同的业务需求。

3. 事务隔离级别:
   - Spring 允许你指定事务的隔离级别,以控制事务之间的相互影响程度,如 READ_COMMITTED、REPEATABLE_READ 等。
   - 事务隔离级别定义了事务对并发读取和修改的数据的可见性。

4. 异常处理与事务回滚:
   - Spring 具有强大的异常处理机制,允许你将特定类型的异常映射到事务回滚。
   - 如果在事务内发生异常,Spring 会自动回滚事务,确保数据的一致性。

5. 多数据源支持:
   - Spring 支持在同一个事务中操作多个数据源,使得跨多个数据库的事务操作变得更加简单。

总的来说,理解 Spring 事务就是理解 Spring 框架如何简化和增强对事务管理的支持。通过 Spring 的事务管理机制,你可以更轻松地管理事务,并且保持代码的清晰和可维护性。

总的来说,理解 Spring 事务就是理解 Spring 框架如何简化和增强对事务管理的支持。通过 Spring 的事务管理机制,你可以更轻松地管理事务,并且保持代码的清晰和可维护性。

2  Spring事务传播行为:

3 Spring事务隔离级别和数据库的事务隔离级别有什么区别:

Spring事务隔离级别是在数据库隔离级别之上又进一步进行了封装。
Spring事务由 @Transactional 注解实现,隔离级别由它的参数 isolation 控制,Isolation 的 Eum 类中定义了“五个”表示隔离级别的值,如下。

Isolation.DEFAULT 是 PlatfromTransactionManager 默认的隔离级别,它的含义是:使用数据库默认的事务隔离级别。

 不一致会怎样

既然是封装,那么Spring项目应该就是以Spring事务为准的,除非使用 @Transactional(isolation = Isolation.DEFAULT)时,才会使用数据库设置的隔离级别。

4 Spring事务实现原理

使用AOP实现的,对使用事务注解的方法做增强

1  创建代理对象:在运行时,Spring 使用 AOP 动态地为目标对象创建一个代理对象。
2  方法执行时添加事务:当业务方法被调用时,代理对象会检查事务通知,如果该方法需要进行事务管理,则在方法执行前开启一个事务。
3 提交或回滚事务:在方法执行完毕后,代理对象根据方法的执行情况(成功或失败)来决定是否提交或回滚事务。

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

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

相关文章

企业资源管理的变革:ERP软件的消失与整合型OA系统的崛起

企业资源管理在现代企业运营中起着至关重要的作用。过去,ERP(Enterprise Resource Planning,企业资源计划)系统因其强大的整合能力和广泛的功能性,被誉为企业管理的中枢。然而,随着技术的迅猛发展和企业需求…

黑马头条微服务学习day02-app端文章查看,静态化freemarker,分布式文件系统MinlO

文章目录 app端文章列表需求分析实现思路实现步骤编写mapper文件编写控制器代码 文章详情实现思路FreemarkerminIO app端文章列表 需求分析 实现思路 实现步骤 ArticleHomeDto package com.heima.model.article.dtos;import lombok.Data;import java.util.Date;Data public c…

某oa代码审计

简介 这次是一次网盘搜索找到的代码。原本因为要下载一些资源顺手充了个网盘会员,结果发现意外的发现网盘搜索出来的资源还挺丰富。于是便开始搜索一些源码。。。 然后安装完毕之后进入web目录中,将web目录单独打包出来。 ps: 由于源码貌似是个备份文件…

超详细Python安装教程(包含python解释器和pycharm)

目录 一,安装python解释器 二,安装PyCharm开发工具 一,安装python解释器 下载地址:https://www.python.org/downloads/ 如果是在windows上下载的话,选择Downloads->Windows 我选择了最新版本的64位安装&#xf…

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…

低代码引时代浪潮,校企合作实训共筑未来蓝图

荣誉在身,责任在肩。 为贯彻国家科教兴国战略,充分发挥技术、人才等资源优势,提升学校科研能力与企业技术管理水平。2024年4月,山东建筑大学联合织信低代码正式签署“校企合作协议”,共同构建产学研联盟创新体系&…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(二)——带着问题的学习;一刷感受;环境搭建

按照作者在读者寄语中的说法:我们得榨干这本书的知识。 带着问题 为了更好的学习,我们最好带着问题去探索。 第一:核心问题与基础知识 如上图:这本书介绍了SLAM相关的核心问题和基础知识。王谷博士给我们做了梳理:…

鸿蒙语言基础类库:【@system.file (文件存储)】

文件存储 说明: 从API Version 6开始,该接口不再维护,推荐使用新接口[ohos.fileio]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import file from system.file;f…

OpenCV下的单目标定,双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify)

OpenCV下的单目标定,双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify) 文章目录 1. 杂话2. 单目标定2.1 先看代码2.2 一点解释2.3 calibrateCamera参数 3. 双目标定3.1 先看代码3.2 stereoCalibrate参数 4. 立体校正4.1 先看代码4.2 一点解…

U盘RAW状态深度解析与高效恢复策略

一、U盘RAW状态探秘:数据访问的隐形壁垒 在数字化时代,U盘作为我们日常生活中不可或缺的数据存储工具,承载着大量的重要信息与文件。然而,当U盘突然变为RAW格式时,这些宝贵的数据便仿佛被无形的屏障所隔离&#xff0c…

前端面试题(CSS篇八)

一、letter-spacing 与字符间距? letter-spacing可以用来控制字符之间的间距,这里说的“字符”包括英文字母、汉字以及空格等。 letter-spacing具有以下一些特性。 (1)继承性。 (2)默认值是normal而不是0。…

Go语言中GC(垃圾回收回收机制)三色标记与混合写屏障

5、Golang三色标记混合写屏障GC模式全分析 (yuque.com) 第1讲-课程目标_哔哩哔哩_bilibili Golang三色标记GC混合写屏障 Go V1.3之前的标记清除(mark and sweep) 垃圾回收、内存管理、自动适放、三色标记法、STW (stop the world) 图的遍历?可达性分…

轴端命名 及多器件编号

1.轴端命名 轴如果单端动力输入时,动力输入一侧,可以称为: 输入端,驱动端 另一侧可能的称谓是: 支撑端、自由端、从动端、未驱动端、静态支撑端。 另外,在查阅相关称谓时,看到了关于卷扬机…

<Rust>egui部件学习:如何在窗口及部件显示中文字符?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第一篇博…

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…

配置服务器

参考博客 1. https://blog.csdn.net/qq_31278903/article/details/83146031 2. https://blog.csdn.net/u014374826/article/details/134093409 3. https://blog.csdn.net/weixin_42728126/article/details/88887350 4. https://blog.csdn.net/Dreamhai/article/details/109…

Linux主机添加ipv6地址

一、添加网卡ipv6地址 通过命令行添加 ip add add 2001:db8:0:1::102/64 dev ens160 通过编辑/etc/sysconfig/network-scripts/目录下的ifcfg-配置文件添加 TYPEEthernet BOOTPROTOdhcp # 或者指定为 "static" 如果你想要静态配置 DEFROUTEyes IPV4_FAILURE_FAT…

多元统计分析概述

目录 1. 多元回归分析 2. 主成分分析&#xff08;PCA&#xff09; 3. 因子分析 4. 判别分析 5. 聚类分析 6. 多维尺度分析&#xff08;MDS&#xff09; 结论 多元统计分析是一组用于分析多个变量之间关系的统计方法。它广泛应用于各个领域&#xff0c;如市场研究、生物医…

C++中的语句详细介绍:简单语句、条件、循环迭代语句、跳转语句、异常处理语句、try语句等

文章目录 C中的语句(1)简单语句A.空语句B.复合语句 (2)条件语句(3)迭代语句A.常规for循环B.范围for循环C.while和do...while (4)跳转语句A.break语句B.continue语句C.goto语句 (5)异常处理语句A.标准异常B.throw抛出异常 (6)try语句 C中的语句 (1)简单语句 简单语句包括&#…

探索 Python 的宝藏:深入理解 NumPy库

探索 Python 的宝藏&#xff1a;深入理解 NumPy 库 引言&#xff1a;为何选择 NumPy&#xff1f; NumPy 是 Python 中一个基础而强大的库&#xff0c;它为 Python 语言提供了高性能的多维数组对象和相应的操作。在科学计算、数据分析、机器学习等领域&#xff0c;NumPy 以其高…