【Spring的事务传播行为有哪些呢?Spring事务的隔离级别?讲下嵌套事务?】

news2024/9/28 5:27:08

如果你想寻求一份与后端相关的开发工作,那么关于Spring事务相关的面试题你就不能说不会并且不能不知道?

在这里插入图片描述

@人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?

一.Spring中声明事务的方式

1.1 编程式事务

编程式事务每次实现都要单独实现,但业务量大功能复杂时,使用编程式事务无疑是痛苦的,而声明式事务不同,声明式事务属于无侵入式,不会影响业务逻辑的实现。

1.2 声明式事务

声明式事务属于无侵入式,不会影响业务逻辑的实现。基于@Transactional注解,事务传播级别基于该注解实现。

二.Spring事务的隔离级别?

2.1 Spring默认事务隔离级别

Spring默认的事务隔离是DEFAULT (默认),其作用的效果就是使用数据库默认的事务隔离级别。
Spring事物的隔离级别比数据库事务隔离级别多一个 Default。

2.2 Spring事务隔离级别分类

  1. DEFAULT (默认)
    这是一个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与 MySQL的隔离级别相对应。

  2. READ_UNCOMMITTED (读未提交)

  3. READ_COMMITTED (读已提交)

  4. REPEATABLE_READ (可重复读)

  5. SERIALIZABLE(串行化)

三.讲下嵌套事务?

3.1 嵌套事务的基本定义

嵌套事务:就是事务方法A调用事务方法B,外层调用方法和内层被调用方法都是事务方法的情况。
一般我们不关心外层调用方法的事务传播行为。而只关心内层被调用方法的传播行为。

3.2 嵌套事务的应用场景

  1. 外层调用方法和内层被调用方法,有异常一起回滚,没问题一起提交。(共用一个事务)
  2. 内层被调用方法回滚与否,不会影响外层调用方法。而外层调用方法出异常回滚,也不会回滚内层被调用方法(两个独立的事务)
  3. 内层被调用方法回滚与否,不会影响外层调用方法。而外层调用方法出异常回滚,也会回滚内层被调用方法(嵌套事务)

3.3 每种应用场景下对应的事务传播行为

  1. @Transactional(propagation=Propagation.REQUIRED) :内外层方法共用外层方法的事务。

  2. @Transactional(propagation=Propagation.REQUIRES_NEW) :当执行内层被调用方法时,外层方法的事务会挂起。两个事务相互独立,不会相互影响。

  3. @Transactional(propagation=Propagation.NESTED) :外事务回滚,内事务也会回滚。

四.Spring事务传播行为有哪些呢?

4.1 基本概念

事务的传播行为(propagation)就是为了解决外层方法调用内层事务方法的各个情况的。

4.2 Spring默认隔离级别

Spring事务的传播级别默认是Propagation.REQUIRED级别。

4.3 Spring事务隔离级别分类

接下来我们就来看看Spring事务传播级别:

  1. Propagation.REQUIRED:支持当前事务,如果没有事务会创建一个新的事务
  2. Propagation.SUPPORTS:支持当前事务,如果没有事务的话以非事务方式执行
  3. Propagation.MANDATORY:支持当前事务,如果没有事务抛出异常
  4. Propagation.REQUIRES_NEW:创建一个新的事务并挂起当前事务
  5. Propagation.NOT_SUPPORTED:以非事务方式执行,如果当前存在事务则将当前事务挂起
  6. Propagation.NEVER:以非事务方式进行,如果存在事务则抛出异常
  7. Propagation.NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作

4.4 Propagation.NESTED 与 Propagation.REQUIRES_NEW 的区别:

Propagation.NESTED 与 Propagation.REQUIRES_NEW 非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。

  1. 使用Propagation.REQUIRES_NEW 时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要 JTA 事务管理器的支持。

  2. 使用Propagation.NESTED 时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。

五.勉励

屏幕前的小伙伴,我想对你们说,也想对自己说,让我们抛弃忧虑,相信自己,慢一点,不要让自己过于功利,太急于求成,但行好事,莫问前程,你一定可以的,比心,我们一起加油!

下期见!

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

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

相关文章

Android Gradle脚本打包

1、背景资料 1.1 Android-Gradle-Groovy-Java-JVM 之间的关系 1.2 Android Gradle Plugin Version版本 与 Gradle Version版本的对应关系 Android Gradle Plugin Version版本Gradle Version版本1.0.0 - 1.1.32.2.1 - 2.31.2.0 - 1.3.12.2.1 - 2.91.5.02.2.1 - 2.132.0.0 -…

WFP网络过滤驱动-限制网站访问

文章目录前言WFP入门介绍WFP基本架构名词解释代码基本结构代码示例前言 WFP Architecture - Win32 apps | Microsoft Learn是一个网络流量处理平台。WFP 由一组连接到网络堆栈的钩子和一个协调网络堆栈交互的过滤引擎组成。 本文使用WFP,实现了一个网络阻断的demo…

Guna UI WinForms 2.0.4.4 Crack

Guna.UI2 WinForms is the suite for creating groundbreaking desktop app UI. It is for developers targeting the .NET Windows Forms platform. 50 多个 UI 控件 具有广泛功能的综合组件可帮助您开发任何东西。 无尽的定制 只需拖放即可创建视觉效果命令和体验。 出色的…

服务端开发之Java备战秋招面试篇2-HashMap底层原理篇

现在Java应届生和实习生就业基本上必问HashMap的底层原理和扩容机制等,可以说是十分常见的面试题了,今天我们来好好整理一下这些知识,为后面的秋招做足准备,加油吧,少年。 目录 1、HashMap集合介绍 2、HashMap的存储…

S2-001漏洞分析

首发于个人博客:https://bthoughts.top/posts/S2-001漏洞分析/ 一、简介 1.1 Struts2 Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。 Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构。 1.2 S2-001 Remote code exploit o…

【保姆级】手把手捋动态代理流程(JDK+Cglib超详细源码分析)

简介动态代理,通俗点说就是:无需声明式的创建java代理类,而是在运行过程中生成"虚拟"的代理类,被ClassLoader加载。 从而避免了静态代理那样需要声明大量的代理类。上面的简介中提到了两个关键的名词:“静态…

C语言进阶(九)—— 函数指针和回调函数、预处理、动态库和静态库的使用、递归函数

1. 函数指针1.1 函数类型通过什么来区分两个不同的函数?一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针,函数名代表函数的入口地址。函数三要素: 名称、参数、返回值。C语言中的函数有自己特定的类型。c语言中通过…

多元回归分析 | ELM极限学习机多输入单输出预测(Matlab完整程序)

多元回归分析 | ELM极限学习机多输入单输出预测(Matlab完整程序) 目录 多元回归分析 | ELM极限学习机多输入单输出预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 -----------ELM结果分析-------------- 均方根误差(RMSE):0.55438 测试集…

webgis高德地图

webgis高德地图 首先准备工作,注册一个高德地图账号,然后在创建一个新应用生一个key跟appId 高德开放平台 接着创建一个html页面 高德配置手册 <style>* {margin: 0;padding: 0;}#

如何维护固态继电器?

固态继电器是SSR的简称&#xff0c;是由微电子电路、分立电子器件和电力电子功率器件组成的非接触式开关。隔离装置用于实现控制端子与负载终端之间的隔离。固态继电器的输入端使用微小的控制信号直接驱动大电流负载。那么&#xff0c;如何保养固态继电器呢&#xff1f; 在为小…

Editor工具开发基础一:顶部菜单栏拓展

一.创建脚本路径 不管是那种工具 都需要在工程里创建一个Editor文件夹 来存放工具.cs文件 二.特性 MenuItem 特性 修饰静态方法 三个构造函数 public MenuItem(string itemName); public MenuItem(string itemName, bool isValidateFunction); public MenuItem(string itemN…

手工测试用例就是自动化测试脚本——使用ruby 1.9新特性进行自动化脚本的编写

昨天因为要装watir-webdriver的原因将用了快一年的ruby1.8.6升级到了1.9。由于1.9是原生支持unicode编码&#xff0c;所以我们可以使用中文进行自动化脚本的编写工作。 做了简单的封装后&#xff0c;我们可以实现如下的自动化测试代码。请注意&#xff0c;这些代码是可以正确运…

【2023考研数学二考试大纲】

文章目录I 考试科目II考试形式和试卷结构一、试卷满分及考试时间二、答题方式三、试卷内容结构四、试卷题型结构III考查内容【高等数学】一、函数、极限、连续二、一元函数微分学三、一元函数积分学四、多元函数微积分学五、常微分方程【线性代数】一、行列式二、矩阵三、向量四…

新手入门吉他推荐,第一把吉他从这十款选绝不踩雷!初学者吉他选购指南【新手必看】

一、新手购琴注意事项&#xff1a; 1、预算范围 一把合适的吉他对于初学者来说会拥有一个很好的音乐启蒙。选一款性价比高&#xff0c;做工材料、音质和手感相对较好的吉他自然不会是一件吃亏的事。**初学者第一把琴的预算&#xff0c;我觉得最低标准也是要在500元起&#xf…

数字IC设计需要学什么?

看到不少同学在网上提问数字IC设计如何入门&#xff0c;在学习过程中面临着各种各样的问题&#xff0c;比如书本知识艰涩难懂&#xff0c;有知识问题难解决&#xff0c;网络资源少&#xff0c;质量参差不齐。那么数字IC设计到底需要学什么呢&#xff1f; 首先来看看数字IC设计…

我们来说说蹿红的AIGC到底是什么?ChatGPT又是什么?

近期&#xff0c;人工智能&#xff08;AI&#xff09;领域动作频频&#xff0c;OPENAI公司Chat GPT的出现&#xff0c;标志着人工智能的研究与应用已经进入了一个崭新的发展阶段&#xff0c;国内腾讯、阿里巴巴、百度、易网、国外微软、谷歌、苹果、IBM、Amazon&#xff0c;等互…

YOLOv5的训练调优技巧

本文编译自英文原文https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results&#xff0c;文章解释了如何提高Yolov5的mAP和训练效果。大多数时间&#xff0c;在没有改变模型或是训练配置的情况下&#xff0c;如果能够提供足够多的数据集以及好的标注&#…

理解随机游走

随机游走 基本思想 从一个或一系列顶点开始遍历一张图。在任意一个顶点&#xff0c;遍历者将以概率1-a游走到这个顶点的邻居顶点&#xff0c;以概率a随机跳跃到图中的任何一个顶点&#xff0c;称a为跳转发生概率&#xff0c;每次游走后得出一个概率分布&#xff0c;该概率分布…

【前端】CSS3弹性布局、媒体查询实现响应式布局和自适应布局

文章目录弹性布局基本概念容器&#xff08;container&#xff09;的属性容器成员&#xff08;item&#xff09;的属性媒体查询响应式布局自适应布局参考弹性布局 基本概念 任何一个容器都可以指定为 Flex 布局。 display:flex;行内元素也可以&#xff1a; display:inline-f…

Apollo规划模块代码学习(2): 轨迹规划流程理论基础详解(lane follow场景为例)

文章目录1、轨迹规划基础2、Frenet坐标系3、路径规划和速度规划4、轨迹优化&#xff08;QP过程&#xff09;5、规划流程(lane follow场景为例)1、规划模块流程2、Apollo中各场景3、Lane_follow场景中task本文以具体场景Lane follow为例梳理具体的轨迹规划算法流程。详细介绍轨迹…