Spring 声明式事务 @Transactional(详解)【面试重点,小林出品】
关于 @Transactional 注解的基本使用,推荐看Spring 声明式事务 @Transactional(基本使用)
概述
本篇博客主要学习 @Transactional 注解当中的三个常⻅属性:
1. rollbackFor:异常回滚属性.指定能够触发事务回滚的异常类型.可以指定多个异常类型
2. Isolation:事务的隔离级别.默认值为 Isolation.DEFAULT
3. propagation:事务的传播机制.默认值为 Propagation.REQUIRED
rollbackFor(异常回滚属性)
@Transactional 默认只在遇到运⾏时异常( RuntimeException 及其子类)和Error时才会回滚,其余的异常不回滚(在首行推荐的博客中有详细的介绍)
如果我们需要所有异常都回滚,需要配置 @Transactional 注解当中的 rollbackFor 属性,通过 rollbackFor 这个属性指定出现何种异常类型时事务进⾏回滚
如下代码:
在 @Transactional 注解中设置了 rollbackFor 属性,对所有的 Exception 异常都进行回滚,此时当方法抛出的是 IOException() 时事务也会自动进行回滚
// rollbackFor 表示事务要对抛出的哪些异常进行回滚@Transactional(rollbackFor ={Exception.class})@RequestMapping("/registry6")public String registry6(String userName,String password) throws IOException {//事务执行的内容Integer result=userService.insertUser(userName,password);log.info("成功插入"+result+"条数据");try {int a=10/0;}catch(Exception e){throw new IOException();}return "注册成功";}
Isolation(事务的隔离级别)
MySQL 事务隔离级别
SQL 标准定义了四种隔离级别, MySQL 全都⽀持.这四种隔离级别分别是:
1.读未提交(READ UNCOMMITTED):读未提交, 也叫未提交读.该隔离级别的事务可以看到其他事务中 未提交的数据. 因为其他事务未提交的数据可能会发⽣回滚,但是该隔离级别却可以读到,我们把该级别读到的数 据称之为脏数据,这个问题称之为脏读.
2. 读提交(READ COMMITTED):读已提交,也叫提交读.该隔离级别的事务能读取到已经提交事务的数据,该隔离级别不会有脏读的问题.但由于在事务的执⾏中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询可能会得到不同的结果,这种现象叫做不可重复读
3. 可重复读(REPEATABLE READ):事务不会读到其他事务对已有数据的修改,即使其他事务已提交.也就可以确保同⼀事务多次查询的结果⼀致,但是其他事务新插⼊的数据,是可以感知到的.这也就引发了幻读问题.可重复读,是 MySQL 的默认事务隔离级别.
幻读的概念:⽐如此级别的事务正在执⾏时,另⼀个事务成功的插⼊了某条数据,但因为它每次查询的结果都是⼀样的,所以会导致查询不到这条数据,⾃⼰重复插⼊时⼜失败(因为唯⼀约束的原因).明明在事务 中查询不到这条信息,但⾃⼰就是插⼊不进去,这个现象叫幻读.
4. 串⾏化(SERIALIZABLE):序列化,事务最⾼隔离级别.它会强制事务排序,使之不会发⽣冲突,从⽽解决了脏读,不可重复读和幻读问题,但因为执⾏效率低,所以真正使⽤的场景并不多.
事务隔离级别与存在的问题:

Spring 事务隔离级别
Spring 中事务隔离级别有 5 种:
1. Isolation.DEFAULT :以连接的数据库的事务隔离级别为主.( @Transactional 默认的隔离级别)
2. Isolation.READ_UNCOMMITTED :读未提交,对应 SQL 标准中 READ UNCOMMITTED
3. Isolation.READ_COMMITTED :读已提交,对应 SQL 标准中 READ COMMITTED
4. Isolation.REPEATABLE_READ :可重复读,对应 SQL 标准中 REPEATABLE READ
’ 5. Isolation.SERIALIZABLE :串⾏化,对应 SQL 标准中 SERIALIZABLE
Spring 中事务隔离级别可以通过 @Transactional 中的 isolation 属性进⾏设置:
@Transactional(isolation = Isolation.READ_COMMITTED)
propagation( Spring 事务传播机制)
什么是事务传播机制
事务传播机制就是:多个事务⽅法存在调⽤关系时, 事务是如何在这些⽅法间进⾏传播的.
⽐如有两个⽅法 A, B 都被 @Transactional 修饰, A ⽅法调⽤ B ⽅法 A ⽅法运⾏时,会开启⼀个事务.当 A 调⽤ B 时, B ⽅法本⾝也有事务,此时 B ⽅法运⾏时,是加⼊ A 的事务,还是创建⼀个新的事务呢?这个就涉及到了事务的传播机制.
事务的传播机制有哪些
@Transactional 注解⽀持事务传播机制的设置,通过 propagation 属性来指定传播⾏为. Spring 事务传播机制有以下 7 种(以下描述建立于子方法有事务的情况):
1. (重点)Propagation.REQUIRED :默认的事务传播级别.如果父方法存在事务,则子方法加⼊该事务.如果父方法没有事务,则子方法创建⼀个新的事务.
2. Propagation.SUPPORTS :如果父方法存在事务,则子方法加⼊该事务.如果父方法没有事务,则子方法以⾮事务的⽅式继续运⾏.
3. Propagation.MANDATORY :强制性.如果父方法存在事务,则子方法加⼊该事务.如果父方法没有事务,则子方法抛出异常.
4. (重点)Propagation.REQUIRES_NEW :创建⼀个新的事务.如果父方法存在事务,则把父方法的事务挂起.也 就是说不管父方法是否存在事务,Propagation.REQUIRES_NEW 修饰的子⽅法都会新开启⾃⼰的事务,且开启的事务相互独⽴,互不⼲扰.
5. Propagation.NOT_SUPPORTED :以⾮事务⽅式运⾏,如果父方法存在事务,则把父方法的事务挂起(不 ⽤).
6. Propagation.NEVER :以⾮事务⽅式运⾏,如果父方法前存在事务,则抛出异常.
7. Propagation.NESTED :如果父方法存在事务,则子方法创建⼀个事务作为当前事务的嵌套事务来运⾏. 如果父方法没有事务,则子方法创建⼀个新的事务.
Spring 中事务的传播机制可以通过 @Transactional 中的 propagation 属性进⾏设置:
@Transactional(propagation = Propagation.REQUIRED)
相关文章:
Spring 声明式事务 @Transactional(详解)【面试重点,小林出品】
关于 Transactional 注解的基本使用,推荐看Spring 声明式事务 Transactional(基本使用) 概述 本篇博客主要学习 Transactional 注解当中的三个常⻅属性: 1. rollbackFor:异常回滚属性.指定能够触发事务回滚的异常类型.可以指定多个异常类型 …...
CSS之高度塌陷和外边距塌陷
目录 1.高度塌陷(原因,如何解决) 【概念介绍】 【解决办法】 【概念介绍-BFC】 【拓展-BFC的触发条件】 2.外边距塌陷 (原因,如何解决) 【概念介绍】 【两种情况】 1.相邻块元素 2.嵌套块元素 【…...
基于SpringBoot Vue美食网站系统
大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…...
哪吒汽车与经纬恒润合作升级,中央域控+区域域控将于2024年落地
近日,在2024哪吒汽车价值链大会上,哪吒汽车与经纬恒润联合宣布合作升级,就中央域控制器和区域域控制器展开合作,合作成果将在山海平台新一代车型上发布。 哪吒汽车首席技术官戴大力、经纬恒润副总裁李伟 经纬恒润在智能驾驶领域拥…...
php学习-实战项目
登录注册 login_db_connect.php 连接数据库 <?php //用于登录界面数据库连接 //设置字符集 header(Content-type:text/html;charsetutf8);//连接数据库 $conmysqli_connect("localhost","root","root","lms"); if (mysqli_conne…...
【项目日记(四)】第一层: 线程缓存的具体实现
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:项目日记-高并发内存池⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你做项目 🔝🔝 开发环境: Visual Studio 2022 项目日…...
海思 tcpdump 移植开发详解
目录 前言 一、开发环境 二、tcpdump 源码下载 三、交叉编译 libpcap 四、交叉编译 tcpdump 五、tcpdump 移植到板子运行 前言 本章内容将讲解,如何在海思平台交叉编译、移植,并基于静态库生成的 tcpdump 网络抓包工具。 一、开发环境 SS…...
Javascript--流程控制
目录 数据类型转换 自动类型转换 强制类型转换 流程控制语句 顺序流程 选择流程 单分支 双分支 多分支 switch 循环流程 for循环 while循环 do...while循环 如何选择 continue和break 循环案例 数据类型转换 由于 javascrip 这个语言它是弱类型语言,…...
新定义51单片机(RD8G37)实现测距测速仪
本文描述用新定义51单片机(RD8G37)超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块: 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…...
Unity中URP下获取每一个额外灯数据
文章目录 前言一、我们先来看一下 SimpleLit 中的调用二、获取额外灯索引1、非移动平台2、非GLES平台3、大多数平台 三、获取额外灯数据 前言 在上一篇文章中,我们知道了URP下是怎么获取额外灯数量的。 Unity中URP下获取额外灯数量 在这篇文章中,我们…...
差分进化算法求解基于移动边缘计算 (MEC) 的无线区块链网络的联合挖矿决策和资源分配(提供MATLAB代码)
一、优化模型介绍 在所研究的区块链网络中,优化的变量为:挖矿决策(即 m)和资源分配(即 p 和 f),目标函数是使所有矿工的总利润最大化。问题可以表述为: max m , p , f F miner …...
Tomcat Notes: Web Security, HTTPS In Tomcat
This is a personal study notes of Apache Tomcat. Below are main reference material. - YouTube Apache Tomcat Full Tutorial,owed by Alpha Brains Courses. https://www.youtube.com/watch?vrElJIPRw5iM&t801s 1、Overview2、Two Levels Of Web Securi…...
智能小程序登陆能力开发文档及示例代码
小程序登录 涂鸦官方提供了登录能力,开发者可以通过相关 API 获取 App 的用户身份标识,快速的建立小程序内的用户体系。 登录流程 说明 需要调用 ty.login() 获取 临时登录凭证 code,并将 code 传到开发者服务器开发者服务器调用涂鸦云开发…...
常见の算法
前言本文主要使用Java 什么,是快乐星球#¥%……什么是算法? 算法是一组完成任务的指令。任何代码片段都可视为算法,但我们主要介绍常见算法 一、引入——二分查找 二分查找是一种算法,其输入是一个有序的元素列表。如…...
openssl3.2/test/certs - 041 - 1024-bit leaf key
文章目录 openssl3.2/test/certs - 041 - 1024-bit leaf key概述笔记END openssl3.2/test/certs - 041 - 1024-bit leaf key 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSSL\test_certs\041\my_openssl_linux_…...
「创新引领未来」科东软件荣获第十二届中国创新创业大赛(广东·广州赛区)优胜奖
近日,广州市科学技术局公布第十二届中国创新创业大赛(广东广州赛区)暨2023年广州科技创新创业大赛常规赛拟获奖企业名单。科东软件凭借国产化技术创新优势、强大的应用场景落地能力和丰富的行业解决方案,荣获第十二届中国创新创业…...
Linux下安装 Redis7
Linux下安装 Redis7 三、Linux下安装 Redis7【redis-7.2.4.tar.gz】3.1.下载redis的安装包3.1.1.手动下载Redis压缩包并上传【redis-7.2.4.tar.gz】3.1.2.wget工具下载redis-7.2.4.tar.gz 3.2.将安装包进行解压缩3.3.进入redis的安装包3.4.检查是否有gcc 环境3.5.编译和安装并指…...
spire.doc合并word文档
文章目录 spire.doc合并word文档1. 引入maven依赖2. 需要合并的word3. 合并文档代码4. 合并结果 spire.doc合并word文档 1. 引入maven依赖 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://r…...
蓝桥杯官网填空题(01串的熵)
问题描述 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。 import java.util.*;public class Main {public static void main(String[] args) {for(double zero1;zero<2333…...
【CodeTop】TOP 100 刷题 51-60
文章目录 51. 缺失的第一个正数题目描述代码与解题思路 52. 训练计划 II题目描述代码与解题思路 53. 子集题目描述代码与解题思路 54. 最小覆盖子串题目描述代码与解题思路 55. 从前序与中序遍历序列构造二叉树题目描述代码与解题思路 56. 零钱兑换题目描述代码与解题思路 57. …...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
