当前位置: 首页 > news >正文

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

思维导图

一、什么是事务?

多条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使用方法

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

相关文章:

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

思维导图一、什么是事务?多条DML要么同时成功,要么同时失败Transaction(tx)二、事务的四个过程:开启事务(start transaction)执行核心业务代码提交事务(如果核心业务处理过程中没有出…...

【项目实战】使用Feign服务间相互调用,其实OpenFeign也没有想象中那么难嘛

一、Feign介绍 openfeign是一个java的http客户端,用来简化http调用 二、Feign架构(来自官方) Feign由五大部分组成, 由于刚开始接触 feign ,比较关注的 clients 跟 encoders/decoders 三、OKHTTP与Feign之间的关系 在Feign中,Client是一个非常重要的组件,Feign最终…...

tun驱动之ioctl

struct ifreq ifr; ifr.ifr_flags | IFF_TAP | IFF_NO_PI; ioctl(fd, TUNSETIFF, (void *)&ifr); 上面的代码的意思是设置网卡信息,并将tun驱动设置为TAP模式。在TAP模式下,在用户空间下调用open打开/dev/net/tun驱动文件,发送(调用send函…...

[acwing周赛复盘] 第 93 场周赛20230304

[acwing周赛复盘] 第 93 场周赛20230304 一、本周周赛总结二、 4867. 整除数1. 题目描述2. 思路分析3. 代码实现三、 4868. 数字替换1. 题目描述2. 思路分析3. 代码实现四、4869. 异或值1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 彩笔了,只A…...

NOIP2022 T4 比赛

P8868 [NOIP2022] 比赛 题目大意 有两个长度为nnn的序列aaa和bbb,有qqq次询问,每次询问给出l,rl,rl,r,求 ∑ilr∑ji1r(max⁡kijak)(max⁡lijbl)\sum\limits_{il}^r\sum\limits_{ji1}^r(\max\limits_{ki}^ja_k)\times(\max\limits_{li}^jb_l…...

计算机组成原理

目录 ❤ 控制器 ❤ 运算器 ❤ 控制器运算器(计算机的中央处理器CPU) ❤ 存储器 内存(主存) 外存 内存和外村的区别 ❤ 输入设备 ❤ 输出设备 ❤ 适配器 ❤ 总线 ❤ 启动计算机的流程 ❤ 机械硬盘 ❤ 固态硬盘 python从小白到总裁完整教程目录:https://b…...

1. 命名规范

1. 命名规范 成绩10开启时间2021年09月17日 星期五 18:00折扣0.8折扣时间2021年11月6日 星期六 00:00允许迟交否关闭时间2021年11月21日 星期日 00:00 家有家法,行有行规。在家有家的规矩,入行有行的规矩。我们计算机一行就有一个命名的规矩,…...

论文投稿指南——中文核心期刊推荐(新闻事业)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...

【Linux】工具(4)——make/Makefile

本期博客我们的任务就是搞懂自动化构建工具——make/Makefile一、什么是make/Makefile📌make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make&…...

【企业服务器LNMP环境搭建】nginx安装

1、介绍(官方网址:nginx news ) 1.1 常见用法 1) web服务器软件 httpd http协议 同类的web服务器软件:apache nginx(俄罗斯) IIS(微软 fastcgi) lighttpd(德国) 2)代理服务器 反向代理 3)邮箱代理服务器 IMAP POP3 SMTP 4)负载均…...

Linux 配置规范 操作系统 _S3A3G3

目录 1.检查使用IP协议远程维护的设备是否配置SSH协议,禁用telnet协议 2.检查账户认证失败次数限制...

基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【C语言进阶:指针的进阶】回调函数

本章重点内容: 字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析什么是回调函数: 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作…...

C++模板的使用

在平时的工作和学习过程中,经常会用到泛型,这里对泛型和模板进行一下梳理,以便理解和使用。 模板关键字 template。为什么要使用模板? 假如设计一个两个参数的函数,用来求两个对象的乘积,在实践中我们可能需要定义n多个函数 int multipli…...

三天Golang快速入门—面向对象

面向对象Golang接口的定义go中类空接口空接口作为函数的参数切片实现空接口map的值实现空接口类型断言值接收者和指针接收者值接收者指针接收者接口嵌套Golang接口的定义 接口interface是一种抽象的类型。接口定义了一个对象的行为规范,只定义规范不实现&#xff0…...

开发手册——一、编程规约_6.并发处理

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明:资源驱动类、工具类、单例工厂…...

ACM---大一第三周周赛(Floyd算法+并查集算法学习周)

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​ 📣系列专栏:ACM周训练题目合集.CSDN 💬总结&#xff1a…...

spring整合mybatis和Junit

该项目使用spring纯注解方式开发&#xff0c;用配置类取代spring的配置文件 一、导入依赖 整合Junit需要导入spring-test 整合mybatis需要导入spring-jdbc、mybatis-spring <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-cont…...

Spring Boot 3.0系列【7】核心特性篇之JSON

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言JSON什么是JSON常用JSON 库GsonFastJsonJacksonJackson 还是 FastjsonSpring Boot 中的 JSON1. 自动配置 Jackson2. @…...

【数据结构初阶】二叉树顺序结构:堆的实现

前言 前边077带着大家学习了树与二叉树的相关概念&#xff0c;这篇文章我们来实现一个二叉树的顺序结构。 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

python打卡day49@浙大疏锦行

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...