Spring——什么是事务?传播行为?事务隔离级别有哪些?

news2025/1/15 6:31:54

思维导图

一、什么是事务?

多条DML要么同时成功,要么同时失败

@Transaction(tx)

二、事务的四个过程:

  1. 开启事务(start transaction)

  1. 执行核心业务代码

  1. 提交事务(如果核心业务处理过程中没有出现异常)(commit transaction)

  1. 回滚事务(如果核心业务处理……出现异常)(rollback transaction)

三、事务的四个特性(ACID)是什么?

  • 原子性:不可分割,事务是最小的工作单元,

  • 一致性:事务前后总量不变,要么成功都成功,要么失败都失败

  • 隔离性:多操作之间不会产生影响就。事务和事务之间因为有隔离性,才可以保证互不干扰

  • 持久性:一个事务一旦被提交,它对数据库的数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其他有任何影响(结束的标志)

四、Spring事务管理

1、事务添加J2EE三层结构里面Service层(业务逻辑层)

2、在Spring进行事务管理操作两种方式:

①、编程式事务管理(自己写流程)

②、声明式事务管理:基于注解方式、基于xml配置文件方式

3、声明式事务管理:

基于注解方式

基于xml配置文件方式

4、在Spring进行声明式事务管理,底层使用AOP原理

5、Spring事务管理API:

PlatformTransactionManager

五、注解是什么?

@Transaction

六、可以用在哪里?

类上:类里的所有方法都添加事务

方法上:只是为方法添加事务

七、创建事务管理器

  1. 开启事务注解

  1. 在service类上面(或者service类里面方法上面)添加事务注解:@Transactional,这个注解添加到类上面,也可以添加方法上面

  1. 如果把这个注解添加类上面,这个类里面所有的方法都添加事务

  1. 如果把这个注解添加方法上面


八、事务属性

1、传播行为

传播行为是什么?

在service类中有a()方法和b()方法,a()方法上有事务,b()方法上也有事务,当a()方法执行过程中调用b()方法,事务是如何传递的?合并到一个事务里?还是开启一个新的事务?这就是事务传播行为。

①、枚举类型

事务传播行为在spring框架中被定义为枚举类型:

②、传播行为有哪些?

REQUIRED:支持当前事务,如果不存在就新建一个(默认)【没有就新建,有就加入】

SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行

MANDATORY:必须运行在一个事务中,如果当前没有事务正在发生,就抛出一个异常

NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务【不支持事务,存在就挂起】

NEVER:以非事务方式运行,如果有事务存在,抛出异常【不支持事务,存在即抛异常】

NESTED:如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中,被嵌套的事务可以独立于外层事务进行提交或回滚,如果外层事务不存在,行为就像REQUIRED一样【没有事务就像和REQUIRED一样】

③、如何使用传播行为?

2、事务隔离级别

①、事务为什么要有隔离?

是为了解决多个并行事务竞争导致的数据安全性问题的一种规范

多个事务竞争可能会出现三种不同的现象:脏读、不可重复读、幻读

②、数据库中读取数据存在的三大问题:(三大读问题)

  • 脏读:读取到没有提交到的数据库的数据

  • 不可重复读:同一事务当中,第一次和第二次读取的数据不一样

  • 幻读:读到的数据是假的

—脏读

读取了还未提交的数据,然后回滚了

脏数据:还没有完全确定下来的数据

—不可重复读

指更新操作

对某个数据多次查询,但是返回了不同的结果。因为在查询间隔,被另一个事务修改并提交了

例如,一个编辑人员两次读取同一文档(如QQ或钉钉在线文档),但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题

—幻读

指增加、删除操作

读取了提交的新事务

事务A在多次读取数据的时候,另一个事务B对这个数据进行了增加或删除操作,导致事务A多次多次读取的数据不一致。

不可重复读和幻读的区别?

二者描述的则重点不同,不可重复读描述的侧重点是修改操作,而幻读描述的侧重点是添加和删除操作。


③、事务隔离级别有哪些?

  • 读未提交:read_uncommitted

  • 有脏读问题

  • 读提交:read_committed

  • 解决了脏读问题,其他事务提交之后才能督导,但存在不可重复读问题

  • 可重复读:repeatable_read

  • 解决不可重复读,可达到重复读效果,只要当前事务不结束,读取到的数据一直都是一样的,存在幻读问题

  • 序列化:serializable

  • 解决幻读问题,事务排队执行,不支持并发

3、只读事务(readOnly)

作用:spring启动优化策略

@Transactional(readOnly=true)

将当前事务设置为只读事务,在该事务执行过程中只允许select语句执行,delete、insert、update都不可执行

作用是:启动spring的优化策略,提高select语句执行效率如果该事务中确实没有增删改操作,建议设置为只读事务)

(意思是:如果事务只读的话,最好设置为只读的,意思是在告诉spring框架你可以启动自己的优化策略了,来提高select的查询效果)

4、设置哪些异常回滚事务

@Transactional(rollbackFor = RuntimeException.class)

表示当发生RuntimeException异常时就回滚事务

5、设置哪些异常不回滚事务

@Transactional(rollbackFor = NullPointerException.class)

表示当发生NullPointerException异常不回滚,其他都回滚


Spring系列文章:

Spring——是什么?作用?内容?用到的设计模式?

Spring——Bean管理-xml方式进行属性注入

Spring——Bean管理-注解方式进行属性注入

Spring——什么是IOC?

Spring——AOP是什么?如何使用?

Spring——什么是事务?传播行为?事务隔离级别有哪些?

Spring——整合junit4、junit5使用方法

如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏脚印支持一下博主~

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

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

相关文章

真香,Grafana开源Loki日志系统取代ELK?

一、Loki是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Graf…

【前端】一个更底层库-React基础知识点

目录Reat是什么?为什么要使用React类库比较容易学习,API非常少。组件内聚,容易组合原生组件和自定义组件融合渲染状态/属性驱动全局更新commonjs生态圈/工具栏完善React基础知识JSX概述JSX嵌入变量Event事件组合组合CHILDREN总结大家好&#…

02-问题思考维度:抓住核心用户、场景化分析、需求收集与辨别、用户故事

文章目录2.1 抓住核心用户2.1.1 为什么要抓住核心用户2.1.2 核心用户的特征根据不同维度,描述核心用户2.1.3 如何抓住核心用户2.2 场景化分析2.2.1 场景五要素2.2.2 场景化分析方法2.2.3 场景化分析方法的应用2.3 需求收集与辨别2.3.1 需求的定义及层次2.3.2 需求收…

汇编相关问题

汇编语言期末复习题DX:单项选择题 DU:多项选择题 TK:填空题 MC:名词解释 v JD:简答题 CXFX:程序分析题 CXTK:程序填空题 BC:编程题第1章:基础知识1、在汇编语言程序的开发…

Vue2.0开发之——购物车案例-axios请求列表数据(45)

一 概述 项目导入axios HTTP 库axios请求数据列表将请求到的数据转存到data中 二 项目导入axios HTTP 库 2.1 axios介绍 Axios是一个基于promise 的 HTTP 库,可以用在浏览器和 node.js中 2.2 axios项目地址 https://www.npmjs.com/package/axios 2.3 axios安装…

excel的Countif函数使用详细教程

excel的Countif函数使用详细教程本教程通过七个示例讲解Countif函数使用教程,其中条件如何设置模糊值,统计固定长度的文本,统计大于某个值,统计等于某个值的,统计日期等。Countif函数作用:对指定单元格区域…

pycharm关联github、新建以及更新仓

此处已经默认你安装了git以及pycharm,这篇文章将会教给大家如何利用pycharm管理自己的github. 目录 pycharm关联github设置 Github创建新的仓 仓库的更新 pycharm:2022。不同版本界面略有不同。 pycharm关联github设置 设置PyCharm,打开File --> Settings -…

SAP 如何批量扩充(复制)科目到其他子公司(T-CODE: FS15)?

SAP 科目主数据管理常用的事务代码: 科目的创建分科目表层(FSP0); 公司代码层(FSS0); 集中创建(FS00)。 现假设我们成立一家新的子公司,需要把母公司的科目批…

博客系统程序(页面设计)

咱们学习javaEE的目的就是完成一个网站.在当前学习的基础上,已经可以完成我们的博客系统的页面的设计了!!!首先我们要进行统筹规划:首先我们的博客页面将会有4个页面:1.博客列表页2.博客详情页显示一个博客的具体内容:3.登录页就是用户输入用户名和页面的地方4.博客编辑页发布新…

1、JAVA 开发环境搭建 - JDK 的安装配置

文章目录一、下载 JDK81、官网地址:[**https://www.oracle.com**](https://www.oracle.com)二、安装 JDK1、鼠标右键安装包,以管理员身份运行(无脑下一步即可)2、细节说明三、配置环境变量1、为啥要配置环境变量呢?2、原因分析3、配置环境变量…

SpringMVC的完整执行流程

Java知识点总结:想看的可以从这里进入 目录2.5、SpringMVC流程2.5、SpringMVC流程 Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图等组成,它和其他的MVC框架一样,以请求为驱动,围绕Servlet分派…

顺序表(一篇带你掌握顺序表)

目录 一、顺序表是什么 1.1 概念 1.2 分类 1.3 结构 二、顺序表的基本操作 2.1 前绪准备 2.2 初始化 2.3 扩容 2.5 尾插 2.6 打印 2.7 尾删 2.8 头插 2.9 头删 2.10 在pos位置插入 2.11 删除pos位置的数据 2.12 查找 三、完整代码 3.1 Test.c文件 3.2 SeqList.h…

C++之const_cast的用法

C的四种类型转换之const_cast 这里写目录标题前言const_cast1.new type为左值引用2. new type为函数类型的右值引用3.new type为对象类型的右值引用4.指向函数的指针和指向成员函数的指针不受约束5.通过非const访问路径修改const对象导致未定义行为6.const_cast只能用来修改指针…

Android onLayout布局流程解析

组件布局流程结论 1.)layout流程始于ViewRootImpl的performLayout()方法,该方法会调用根View(DecorView)的layout()方法进行布局,因为DecorView是ViewGroup(FrameLayout),所以layout流程来到了ViewGroup(其…

【C语言指针练习题】你真的学会指针了吗?

✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 文章目录✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨一维数组练习题:字符数组练习题:字符指针练习题:二维数组练习题&am…

LeetCode-63. 不同路径 II

题目来源 63. 不同路径 II 递归 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int row obstacleGrid.length-1;int col obstacleGrid[0].length-1;return process(row,col,0,0,obstacleGrid);}private int process(int row ,int col,int i…

重装系统一半电脑蓝屏如何解决

小编相信大家在使用电脑或者给电脑重装系统的时候都遇到过电脑蓝屏等等故障问题。最近有用户就遇到了这样一个问题,问小编重装系统一半电脑蓝屏怎么办,那么今天小编就告诉大家重装系统一半电脑蓝屏的解决方法。 工具/原料: 系统版本&#x…

Tecent libco C++协程库初探

安装 https://github.com/Tencent/libco 上把release版本的下下来: mkdir build && cd build && cmake .. && make拿到动态和静态库啦,然后cp到/usr/local/lib就完成安装啦。 项目有很多example,直接进根目录make就…

phpinfo包含临时文件Getshell全过程及源码

目录 前言 原理 漏洞复现 靶场环境 源码 复现过程 前言 PHP LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如session文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。假如在服…

B. Sherlock and his girlfriend

Sherlock has a new girlfriend (so unlike him!). Valentines day is coming and he wants to gift her some jewelry. He bought n pieces of jewelry. The i-th piece has price equal to i  1, that is, the prices of the jewelry are 2, 3, 4, ... n  1. Watson…