当前位置:首页 > 科技  > 软件

Spring事务的传播机制

来源: 责编: 时间:2023-10-30 09:07:11 232观看
导读我们都知道,在数据库中有这事务的存在,但是更多的时候,我们还会被经常问到这个关于 Spring 中 事务的各种行为,又或者说是传播机制,或者隔离级别等内容,那么面试的时候我们应该怎么去回答这个 Spring 事务的传播机制以及隔

我们都知道,在数据库中有这事务的存在,但是更多的时候,我们还会被经常问到这个关于 Spring 中 事务的各种行为,又或者说是传播机制,或者隔离级别等内容,那么面试的时候我们应该怎么去回答这个 Spring 事务的传播机制以及隔离级别呢?LKi28资讯网——每日最新资讯28at.com

什么是 Spring 的事务

事务是逻辑处理原⼦性的保证⼿段,通过使⽤事务控制,可以极⼤的避免出现逻辑处理失败导致的脏数 据等问题。LKi28资讯网——每日最新资讯28at.com

事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范围,事务 隔离级别定义的是事务在数据库读写⽅⾯的控制范围。LKi28资讯网——每日最新资讯28at.com

Spring事务传播机制

PROPAGATION_REQUIRED

Spring默认的事务传播级别,使⽤该级别的特点是,如果上下⽂中 已经存在事务,那么就加⼊到事务中执⾏,如果当前上下⽂中不存在事务,则新建事务执⾏。所以这个 级别通常能满⾜处理⼤多数的业务场景。LKi28资讯网——每日最新资讯28at.com

PROPAGATION_SUPPORTS

从字⾯意思就知道,supports,⽀持,该传播级别的特点是,如果上下⽂存在事务,则⽀持事务加⼊事务,如果没有事务,则使⽤⾮事务的⽅式执⾏。所以说,并⾮所有的包在transactionTemplate.execute中的代码都会有事务⽀持。这个通常是⽤来处理那些并⾮原⼦性的⾮核⼼业务逻辑操作。应⽤场景较少。LKi28资讯网——每日最新资讯28at.com

PROPAGATION_MANDATORY

该级别的事务要求上下⽂中必须要存在事务,否则就会抛出异常!配置该⽅式的传播级别是有效的控制上下⽂调⽤代码遗漏添加事务控制的保证⼿段。⽐如⼀段代码不能单独被调⽤执⾏,但是⼀旦被调⽤,就必须有事务包含的情况,就可以使⽤这个传播级别。LKi28资讯网——每日最新资讯28at.com

PROPAGATION_REQUIRES_NEW

从字⾯即可知道,new,每次都要⼀个新事务,该传播级别的特点是,每次都会新建⼀个事务,并且同时将上下⽂中的事务挂起,执⾏当前新建事务完成以后,上下⽂事务恢复再执⾏。LKi28资讯网——每日最新资讯28at.com

这是⼀个很有⽤的传播级别,举⼀个应⽤场景:现在有⼀个发送100个红包的操作,在发送之前,要做 ⼀些系统的初始化、验证、数据记录操作,然后发送100封红包,然后再记录发送⽇志,发送⽇志要求 100%的准确,如果⽇志不准确,那么整个⽗事务逻辑需要回滚。LKi28资讯网——每日最新资讯28at.com

怎么处理整个业务需求呢?就是通过这个PROPAGATION_REQUIRES_NEW 级别的事务传播控制就可以 完成。发送红包的⼦事务不会直接影响到⽗事务的提交和回滚。LKi28资讯网——每日最新资讯28at.com

PROPAGATION_NOT_SUPPORTED

这个也可以从字⾯得知,not supported ,不⽀持,当前级别的特点就是上下⽂中存在事务,则挂起事务,执⾏当前逻辑,结束后恢复上下⽂的事务。LKi28资讯网——每日最新资讯28at.com

这个级别有什么好处?LKi28资讯网——每日最新资讯28at.com

可以帮助你将事务极可能的缩⼩。我们知道⼀个事务越⼤,它存在的⻛险也就越多。所以在处理事务的过程中,要保证尽可能的缩⼩范围。⽐如⼀段代码,是每次逻辑操作都必须调⽤的,⽐如循环1000次的某个⾮核⼼业务逻辑操作。这样的代码如果包在事务中,势必造成事务太⼤,导致出现⼀些难以考虑周全的异常情况。所以这个事务这个级别的传播级别就派上⽤场了。LKi28资讯网——每日最新资讯28at.com

PROPAGATION_NEVER

该事务更严格,上⾯⼀个事务传播级别只是不⽀持⽽已,有事务就挂 起,⽽PROPAGATION_NEVER传播级别要求上下⽂中不能存在事务,⼀旦有事务,就抛出runtime异 常,强制停⽌执⾏!这个级别上辈⼦跟事务有仇。LKi28资讯网——每日最新资讯28at.com

PROPAGATION_NESTED

字⾯也可知道,nested,嵌套级别事务。该传播级别特征是,如果上 下⽂中存在事务,则嵌套事务执⾏,如果不存在事务,则新建事务LKi28资讯网——每日最新资讯28at.com

Spring 事务隔离级别

Serializable

最严格的级别,事务串⾏执⾏,资源消耗最⼤;LKi28资讯网——每日最新资讯28at.com

REPEATABLE READ

保证了⼀个事务不会修改已经由另⼀个事务读取但未提交(回滚)的数据。 避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。LKi28资讯网——每日最新资讯28at.com

READ COMMITTED

⼤多数主流数据库的默认事务等级,保证了⼀个事务不会读到另⼀个并⾏事务 已修改但未提交的数据,避免了“脏读取”。该级别适⽤于⼤多数系统。LKi28资讯网——每日最新资讯28at.com

Read Uncommitted

保证了读取过程中不会读取到⾮法数据LKi28资讯网——每日最新资讯28at.com

我们来举个事务传播的例子:LKi28资讯网——每日最新资讯28at.com

假设有一个方法childTest(),它是一个事务方法,使用了PROPAGATION_REQUIRED事务传播选项。如果在一个事务中调用这个方法,那么它会在同一个事务中执行。LKi28资讯网——每日最新资讯28at.com

现在假设有一个方法mainTest(),它调用了childTest()方法。如果在mainTest()方法中没有显式地声明事务,而childTest()方法中声明了事务,那么childTest()方法将在一个新的事务中执行,这个新的事务不会影响mainTest()方法的执行。LKi28资讯网——每日最新资讯28at.com

但是,如果mainTest()方法也使用了事务传播选项,例如PROPAGATION_REQUIRED,那么在执行childTest()方法时,它的事务会隐式地与mainTest()方法的事务关联。这意味着如果childTest()方法的事务成功,则mainTest()方法的事务也会成功;如果childTest()方法的事务失败,则mainTest()方法的事务也会失败。LKi28资讯网——每日最新资讯28at.com

关于 Spring 的事务,你了解了么?LKi28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-15748-0.htmlSpring事务的传播机制

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Envoy 基于文件和 API 的动态配置方式

下一篇: 为什么 IT 项目仍然失败

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • 线程通讯的三种方法!通俗易懂

    线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 三言两语说透设计模式的艺术-单例模式

    三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top
Baidu
map