Spring事务的实现原理

Spring事务原理

Spring框架支持对于事务的管理功能,开发人员使用Spring框架能极大的简化对于数据库事务的管理操作,不必进行手动开启事务,提交事务,回滚事务,就是在配置文件或者项目的启动类配置Spring事务相关的注解驱动,使用@Transaction注解即可,既开启并使用Spring事务管理功能

Spring事务分类

通过Spring管理的事务可以分为逻辑事务和物理事务两大类

  • 逻辑事务:通过指通过Spring等框架管理的事务,这种事务建立在物理事务之上,比物理事务更加抽象
  • 物理事务:通常指的是针对特定数据库的事务

Spring支持两种事务声明式方式,分别是编程式事务和声明式事务

  • 编程式事务:如果系统需要明确事务,并且需要细粒度的控制各个事务的边界,此时建议使用编程式事务
  • 声明式事务:如果系统对事务的控制粒度比较粗糙,则建议使用声明式事务

Spring的事务三大接口

  1. PlatformTransactionManager接口:为Hibernate、Mybatis、JTA等持久化框架提供事务管理器,具体的实现由框架自己实现
  2. TransactionDefinition接口:主要定义和事务相关的方法,表示事务属性的常量等信息。部分事务属性的常量和Propagation枚举类中的事务传播类型相对应
  3. TransactionStatus接口:主要用来存储事务执行的状态,并且定义了一组方法,用于判断或者读取事务的状态信息

Spring事务隔离级别       

Spring中存在5中隔离级别主要为:

  • ISOLATION_DEFAULT:该级别是Spring中默认的事务隔离级别
  • ISOLATION_READ_UNCOMMITTED(读未提交):是Spring中最低的隔离级别,事务A能够读取到事务B未提交的数据,会出现脏读、不可重复读、幻读
  • ISOLATION_READ_COMMITTED(读已提交):可以保证事务A的只有事务提交后事务B才能读取到事务A的数据,会出现不可重复读、幻读
  • ISOLATION_REPEABLE_READ(可重复读):可以保证不会出现脏读和不可重复读的问题,但是会出现幻读的问题
  • ISOLATION_SERIALIZABLE(可串行化):事务只能按照特定的顺序执行,多个事务之间只能按照串行化的顺序执行,这个是最可靠的隔离级别,并发性最差

Spring事务传播机制(7种)

         支持当前事务的事务传播机制:REQUIRED、SUPPORTS、MANDATORY

        不支持当前事务的事务传播机制:REQUIRED_NEW、NOT_SUPPORTS、NEVER

        嵌套事务机制:NESTED

注意点:枚举类Propagation集合@Transaction注解使用,枚举类中定义的事务传播行为类型与TransactionDefinition接口定义的事务传播类型相对应,在使用@Transaction注解时,使用的是Propagation枚举类中的事务传播类型,而不是直接使用TransactionDefinition接口中定义的事务传播类型

  1. REQUIRED事务传播类型:表示当前没有事务,就创建一个事务,如果已经存在一个事务,就加入这个事务,Spring默认的事务传播类型
  2. REQUIRES_NEW事务传播类型:表示当前存在事务,则把当前事务挂起,并重新创建新的事务并执行,直到新的事务提交或者回滚,才会恢复执行原来的事务。原有事务跟新事务互不影响
  3. SUPPORTS事务传播类型:表示支持当前事务,如果当前没有事务,就以非事务的方式执行
  4. MANDATORY:表示支持当前事务,这种事务传播类型具备强制性,当前操作必须存在事务,如果不存在,则抛出异常
  5. NOT_SUPPORTED事务传播类型:表示当前以非事务方式执行,如果当前操作在一个事务中,则把当前事务挂起,直到当前操作完成在恢复事务的执行。
  6. NEVER事务传播类型:表示以非事务的方式执行,如果当前操作存在事务,则抛出异常
  7. NESTED事务传播类型:表示如果当前方法中有一个事务正在运行,则这个方法应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务进行提交或者回滚,如果没有活动事务,则按照REQUIRED事务传播类型执行

Srping中常用的事务传播类型

        7种事务传播机制类型,日常工作上主要使用只有REQUIRED、NOT_SUPPORTED、REQUIRES_NEW三种

        REQUIRED:Spring中默认的传播机制,适用于大部分场景

        NOT_SUPPORTED:适用于发送提示信息、站内信、短信、邮件等,这类场景要求不影响系统的主体业务逻辑,即使操作失败也不应该对主体逻辑产生影响,不能使主体逻辑的事务回滚

        REQUIRES_NEW:总是创建新的事务执行,适用于不受外层方法事务影响的场景。例如记录日志的操作,不管主体业务逻辑是否已经完成,日志都要记录下来,不能因为主体业务逻辑异常事务回滚导致日志记录不到

Spring 事务失效的场景

  • 数据库不支持事务:Spring事务生效的前提是连接的数据库支持事务,如果底层不支持事务,则Spring的事务肯定会失效,例如Mysql的MyISAM存储引擎
  • 事务方法没有被Spring管理:事务方法所在的类没有加载到Spring IOC容器中,事务方法所在的类没有被Spring管理,则食物会失效
  • 方法没有被public修饰:此时事务也会失效
  • 同一个类中的方法调用:如果同一个类的方法A上添加了事务注解,方法B上添加了事务注解,方法A调用方法B,则方法B的事务会失效
  • 未配置事务管理器:如果在项目中没有配置Spring的事务管理器,即使使用了Spring的事务管理功能,Spring的事务也不会生效
  • 方法的事务传播类型不支持事务:如果内部方法的事务传播为不支持事务传播类型,则内部方法的事务在Spring中会失效
  • 不正确的捕获异常:如果自己把异常给吃了,那将会导致事务的失效
  • 标准错误的异常类型:Spring中默认回滚的事务异常类型为RuntimeException,如果抛出的异常不是RuntimeException 或者其子类,事务将失效

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

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

相关文章

什么是最大路径?什么是极大路径?

最近学习中,在这两个概念上出现了混淆,导致了一些误解,在此厘清。 最大路径 在一个简单图G中,u、v之间的距离 d ( u , v ) min ⁡ { u 到 v 的最短路的长度 } d(u,v) \min \{ u到v的最短路的长度 \} d(u,v)min{u到v的最短路的…

wefaf

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

使用Bash脚本和Logrotate实现Nginx日志切割

Nginx是一个广泛使用的高性能Web服务器,它能够处理大量的并发连接,但同时也会生成大量的日志文件。为了有效管理这些日志文件并确保系统的正常运行,我们需要定期对Nginx的日志文件进行切割和归档。本文将介绍如何使用Bash脚本和Logrotate来实…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度,有此需求的小伙伴学起来! 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时&#x…

【C++】:string类的基本使用

目录 引言一,string类对象的常见构造二,string类对象的容量操作三,string类对象的访问及遍历操作四,string类对象的修改操作五,string类非成员函数六,整形与字符串的转换 引言 string 就是我们常说的"…

如何对SQL Server中的敏感数据进行加密解密?

为什么需要对敏感数据进行加密? 近几年有不少关于个人数据泄露的新闻(个人数据通常包含如姓名、地址、身份证号码、财务信息等),给事发公司和被泄露人都带来了不小的影响。 许多国家和地区都出台了个人数据保护的法律法规&#…

Unity Animation--动画窗口指南(使用动画视图)

Unity Animation--动画窗口指南(使用动画视图) 使用动画视图 window -> Animation 即可打开窗口 查看GameObject上的动画 window -> Animation -> Animation 默认快捷键 Ctrl 6 动画属性列表 在下面的图像中,“动画”视图&am…

思科模拟器--2.静态路由和默认路由配置24.5.15

首先,创建三个路由器和两个个人电脑。 接着,配置两台电脑的IP,子网掩码和默认网关 对Router 0,进行以下命令: 对Router进行以下命令: 对Router2进行以下命令: 本实验完成。 验证:PC…

Vue3+ts(day06:路由)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…

【ARMv8/v9 系统寄存器 5 -- ARMv8 Cache 控制寄存器 SCTRL_EL1 使用详细介绍】

关于ARM Cache 详细学习推荐专栏: 【ARM Cache 专栏】 【ARM ACE Bus 与 Cache 专栏】 文章目录 ARMv8/v9 Cache 设置寄存器ARMv8 指令 Cache 使能函数测试代码 ARMv8/v9 Cache 设置寄存器 关于寄存器SCTRL_EL1 的详细介绍见文章:【ARMv8/v9 异常模型入…

纯正英语新闻 5.15

seizing territory :夺取领土 battlefield:战场 shrinking:缩小 paramedic:医护人员 mercilessly destroy:无情地摧残 blown up:炸毁 northern outskirts :北郊 terrified:害怕 shelling&#xff…

西南大学计算机考研,选学硕还是专硕?西南大学计算机考研考情分析!

西南大学(Southwest University)是教育部直属,教育部、农业农村部、重庆市共建的重点综合大学,是国家首批"双一流"建设高校,"211工程"和"985工程优势学科创新平台"建设高校。现任党委书…

【嵌入式大赛应用赛道】机械手臂

电机 进步电机:它的转动是以确定的步数进行的,只要计算好脉冲数量和频率,就可以准确预测和控制电机的转动角度、速度以及停止的位置 伺服电机:将输入的电信号(如电压或电流指令)转换成轴上的精确旋转运动…

大模型算法(一):从Transformer到ViT再到LLaMA

单任务/单领域模型 深度学习最早的研究集中在针对单个领域或者单个任务设计相应的模型。 对于CV计算机视觉领域,最常用的模型是CNN卷积模型。其中针对计算机视觉中的不同具体任务例如分类任务,目标检测任务,图像分割任务,以CNN作…

【传知代码】VRT: 关于视频修复的模型(论文复现)

前言:随着数字媒体技术的普及,制作和传播视频内容变得日益普遍。但是,视频中由于多种因素,例如传输、存储和录制设备等,经常出现质量上的问题,如图像模糊、噪声干扰和低清晰度等。这类问题对用户的体验和观…

hive动态分区

hive动态分区概念:允许插入数据到分区表时,根据插入的数据内容自动创建相应的分区 1.启用动态分区功能 hive.exec.dynamic.partitiontrue; 2.分区字段设置 在insert语句中, 动态分区的字段必须放在select语句的末尾,hive会根据这个字段的值来创建分区目录 示例: --创建分区表…

几个排序器的verilog及其资源占用、延时分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 因为课题需要,调研了几个快速排序方法,并手写或者改进了若干待测试对象,包括记分板型冒泡排序(这个是别人的&#xff09…

树莓派|I2C通信

什么是I2C通信 I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在集成电路(IC)之间传输数据。它由飞利浦公司(现在的恩智浦半导体公司)在20世纪80年代开发,并且成为了广泛应用于各种电子设备中的通…

Spring Security 6.x 系列【73】认证篇之同端互斥登录

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 概述2. 实现方案3. 案例演示3.1 内存会话3.1.1 并发控制流程分析3.1.2 功…

【35分钟掌握金融风控策略28】贷中模型体系策略应用

目录 贷中模型体系策略应用 信用模型体系和模型在策略中的应用 反欺诈模型体系和模型在策略中的应用 运营模型体系和模型在策略中的应用 贷中模型体系策略应用 在贷前模型部分已经讲过,贷前开发的很多模型是可以在贷中直接使用的。贷中与贷前的不同点在于&…