认识 spring 中的事务 与 事务的传播机制
前言
本篇介绍spring中事务的实现方式,如何实现声明式事务,对事物进行参数的设置,了解事务的隔离级别和事务的传播机制;如有错误,请在评论区指正,让我们一起交流,共同进步!
文章目录
- 前言
- 1. spring中事务实现的方式
- 2. 实现声明式事务
- 3. 设置@Transactional的参数
- 4. spring 的事务隔离级别
- 5. 事务的传播机制 - spring
- 总结
本文开始
1. spring中事务实现的方式
spring中事务实现的方式:
① 编程式事务 - 手动 写代码去操作事务
实现主要过程:开启事务 + 提交事务 + 回滚事务;- 都需要手动
② 声明式事务 - 使用注释操作事务 - 自动
实现主要过程:进入方法自动开启事务,执行完方法自动提交事务,出现错误,自动回滚事务;- 让事务自动开启+自动提交事务
事务目的:实现事务,当程序异常时,会进行回滚操作;
手动实现事务太过于麻烦,一般都使用声明式事务(自动),下面就介绍一下声明式事务;
2. 实现声明式事务
实现方式:
① 在要执行的方法(事务)上,加上注释@Transactional; - 推荐使用
② 在类上加注释@Transactional;
//在方法上声明事务@Transactionalpublic int add() {//......}//在类上声明事务@Transactionalpublic class User {//......}
3. 设置@Transactional的参数
设置参数的方式:在注释括号中添加参数 - @Transactional(xxx)
@Transactional的参数:
- value 和 transactionManager : 指定选择哪个事务管理器
- propagation: 事务的传播行为
- islation: 设置事务的隔离级别
- readOnly: 设置事务的为 只读事务
- timeout: 设置事务的超时时间
4. spring 的事务隔离级别
添加参数示例:@Transactional(islation = Isolatino.DEFAULT)
① Isolatino.DEFAULT: 事务的默认隔离级别 - 以客户端连接事务的隔离级别为主;
② Isolatino.READ_UNCOMMITTED: 读未提交
③ Isolatino.READ_COMMITTED:读已提交
④ Isolatino.REPEATABLE_READ: 可重复读
⑤ Isolatino.SERIALIZABLE_READ: 串行化
客户端可以设置数据库隔离级别:
spring 可认为是一个客户端,可以设置数据库隔离级别;
当前连接的事务隔离级别,也就是spring客户端的隔离级别;
默认事务隔离级别 与 当前连接(spring)的事务隔离级别 默认是一样的;
数据库隔离级别以当前spring设置的事务隔离级别为准,如果没设置就是默认的事务隔离级别;
设置当前连接的事务(当前spring客户端)隔离级别:
//查询事务 - 此命名使用mysql 5.7版本
select @@global.tx_isolation,@@tx_isolation;
//设置事务隔离级别
set session transaction isolation level SERIALIZABLE
问题:设置@Transactional,程序出现异常,但被 try catch捕获,虽捕获但没有处理异常(抛出异常),导致事务没有回滚;
解决方式:让事务在异常情况下也可以实现回滚;
1.抛出异常 - throw e
2. 手动回滚事务: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();;
5. 事务的传播机制 - spring
什么是事务的传播机制?
事务的传播机制:规定多个事务相互调用,事务的执行行为的机制; (执行行为 = 各方法传递的行为)
事务的传播机制:
- Propagation.REQUIRED: 默认事务传播机制,当前存在事务,就加入事务;当前没有事务,就创建一个新的事务;
- Propagation.SUPPORT S: 当前存在事务,就加入事务;当前没有事务,就以非事务方式继续运行;
【注】以非事务方式运行,事务调用链上遇到异常,不关注,不会再进行回滚操作;(不再是一个整体,各执行各的)- Propagation.MANDATORY: 当前存在事务,就加入事务;当前没有事务,就抛出异常;
- Propagation.REQUIRES_NEW:创建一个新的事务,如果当前存在事务,就把当前事务挂起;- 开启自己新的事务,且相互独立;
- Propagation.NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,就把当前事务挂起;
- Propagation.NEVER: 以非事务方式运行,如果当前存在事务,就抛出异常;
- Propagation.NESTED: 当前存在事务,就创建一个事务作为嵌套事务来运行;如果没有当前事务,相当于默认事务Propagation.REQUIRED;- 嵌套事务在嵌套进事务时会标记保存点,嵌套事务出现异常,会回到标记点(回滚),不影响整个事务链(存档);
【注】事务c异常,在事务c中做了手动回滚事务的操作;该异常不会被事务a感知到;
总结
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!
相关文章:
认识 spring 中的事务 与 事务的传播机制
前言 本篇介绍spring中事务的实现方式,如何实现声明式事务,对事物进行参数的设置,了解事务的隔离级别和事务的传播机制;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录…...
PHP中的16个危险函数
php中内置了许许多多的函数,在它们的帮助下可以使我们更加快速的进行开发和维护,但是这个函数中依然有许多的函数伴有高风险的,比如说一下的16个函数不到万不得已不尽量不要使用,因为许多“高手”可以通过这些函数抓取你的漏洞。 …...
11、Nvidia显卡驱动、CUDA、cuDNN、Anaconda及Tensorflow Pytorch版本
Nvidia显卡驱动、CUDA、cuDNN、Anaconda及Tensorflow-GPU版本 一、确定版本关系二、安装过程1.安装显卡驱动2、安装CUDA3、安装cudnn4、安装TensorFlow5、安装pytorch 三、卸载 一、确定版本关系 TensorFlow Pytorch推出cuda和cudnn的版本,cuda版本推出驱动可选版本…...
将数据库文件压缩并上传到文件服务器
1.引入上传工具和压缩包工具 <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId> </dependency> <dependency><groupId>com.zlpay</groupId><artifactId>zl-util-fastdfs…...
docker — 容器网络
一、概述 Docker容器每次重启后容器ip是会发生变化的。 这也意味着如果容器间使用ip地址来进行通信的话,一旦有容器重启,重启的容器将不再能被访问到。 而Docker 网络就能够解决这个问题。 Docker 网络主要有以下两个作用: 容器间的互联…...
腾讯面试题:使用Redis分布式锁可能会出现哪些问题?
嗨大家好,我是你们的小米!今天要和大家聊一个有趣的话题,那就是“腾讯面试题:使用Redis做分布式锁可能会出现哪些问题?”没错,就是腾讯大佬们在面试时经常会问到的一个问题,我们来一起深入了解一…...
直接在html中引入Vue.js的cdn来实现Vue3的组合式API
Vue3的组合式API是使用setup函数来编写组件逻辑的。setup函数是Vue3中用于替代Vue2的选项API(如data、methods等)的一种方式。在setup函数中,你可以访问到一些特殊的响应式对象,并且可以返回一些可以在模板中使用的数据、方法等。…...
YAPi在线接口文档简单案例(结合Vue前端Demo)
在前后端分离开发中,我们都是基于文档进行开发,那前端人员有时候无法马上拿到后端的数据,该怎么办?我们一般采用mock模拟伪造数据直接进行测试,本篇文章主要介绍YApi在线接口文档的简单使用,并结合Vue的小d…...
Java基础篇--Runtime类
介绍 Runtime类用于表示虚拟机运行时的状态,它用于封装JVM虚拟机进程。每次使用java命令启动虚拟机都对应一个Runtime实例,并且只有一个实例。 因此在Runtime类定义的时候,它的构造方法已经被私有化了(单例设计模式的应用),对象…...
数字后端笔试题(1)DCG后congestion问题
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 已知某模块的DCG结果显示存在congestion,有congestion部分逻辑结构如下图: 问题1: 如何分析该电路有congestion问题的原因? 答:data selecti…...
数据结构:交换排序
冒泡排序 起泡排序,别名“冒泡排序”,该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列。 算法步骤 比较相邻的元素。如果第一个元素大于第二个元素,就交换它们。对每一对相邻…...
SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?
ServletWebServletAutoConfiguration类定义如下: 可以看到其中通过Import注解导入了其内部类BeanPostProcessorRegister。 BeanPostProcessor中定义的registerBeanDefinition方法会被Spring容器调用。 registerBeanDefinitions方法调用了RegistrySyntheticBeanIf…...
年至年的选择仿elementui的样式
组件:<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 时间选择年 - 年 --> <template><div class"yearPicker"…...
分类过程中的一种遮挡现象
( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由6张二值化的图片组成,让A,B中各有3个点,且不重合,统计迭代次数并排序。 其中有10组数据 差值结构 迭代次数 构造平均列A 构造平均列AB…...
下一代服务架构:单体架构-->分布式架构-->微服务(DDD)-->软件定义架构(SDF with GraphEngine)
参考:自己实现一个SQL解析引擎_曾经的学渣的博客-CSDN博客...
excel 之 VBA
1、excel和VBA 高效办公,把重复性的工作写成VBA代码(VB代码的衍生物,语法和VBA相同)。 首先打开开发工具模式,如果没有选显卡,需要手动打开 打开程序编辑界面 快捷键 altF11一般操作 程序调试…...
【数学建模】--聚类模型
聚类模型的定义: “物以类聚,人以群分”,所谓的聚类,就是将样本划分为由类似的对象组成的多个类的过程。聚类后,我们可以更加准确的在每个类中单独使用统计模型进行估计,分析或预测;也可以探究不…...
css3新增选择器总结
目录 一、属性选择器 二、结构伪类选择器 三、伪元素选择器 四、UI状态伪类选择器 五、反选伪类选择器 六、target选择器 七、父亲选择器、后代选择器 八、相邻兄弟选择器、兄弟们选择器 一、属性选择器 (除IE6外的大部分浏览器支持) E&#…...
0基础学C#笔记10:归并排序法
文章目录 前言一、递归的方式二、代码总结 前言 将一个大的无序数组有序,我们可以把大的数组分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。由于两个小的数组都是有序的,所以在合并的时候是很…...
nlohmann json:通过for遍历object和array
object和array可以使用数for进行遍历: #include <iostream> #include <nlohmann/json.hpp> using namespace std; using json = nlohmann::json;auto checkJsonType(json& x) {if(x.type() == json::value_t::null){cout<<x<<" is null&quo…...
万东医疗2026 CMEF发布影像智能体矩阵
当算力指数级增长,大模型渗透到每一处角落,人工智能正在重写医疗的底层代码。但问题从来不是“AI能做什么”,而是机器能否真正理解临床,像医生一样思考,然后自主行动?美的医疗旗下万东医疗在2026年春季CMEF…...
给AI代理加记录仪,值不值?从OpenClaw漏洞看日志监控的代价与边界
先说结论 日志监控能有效追溯AI代理的异常行为,但引入额外开销和复杂度,需要权衡安全与性能。 自建方案(如ELK)控制力强但成本高,云服务省心但可能受限于厂商锁定和功能边界。 实施前应明确监控粒度、告警策略和存储…...
打破千篇一律的死胡同:调问网「逻辑配置」功能全解析
调问自开源以来一直坚持前后端所有代码 100% 开源 ,助力企业建设属于自己的问卷调研系统 。官网地址:https://www.diaowen.net在线服务:https://www.surveyform.cn源码下载:https://gitee.com/wkeyuan/DWSur无论是在进行精细化的客…...
Harness层接口限流:防止恶意调用
一、 标题 Harness 层接口限流实战:从恶意调用防护到 DevOps 平台稳定性的铜墙铁壁二、 摘要/引言 2.1 开门见山(Hook) 假设你是一家拥有 500 开发者、日均 1000 CI/CD 流水线运行、每月发布 200 新特性的中型 SaaS 公司 DevOps 负责人。周一…...
vivado hls设计通用评价指标
一、评价vivado hls设计好坏的指标 资料利用、功耗、流水线、循环展开、数据流、数组分割、浮点转定点。 1.延迟 2.吞吐量 3.启动间隔II Vivado HLS设计的评价指标主要围绕资源、时序、吞吐量和延迟这四大核心维度展开。二、Area面积资源 LUT,FF,BRAM,DSP 硬件电路所…...
Great Tables扩展开发:自定义格式化函数和主题的完整教程
Great Tables扩展开发:自定义格式化函数和主题的完整教程 【免费下载链接】great-tables Make awesome display tables using Python 项目地址: https://gitcode.com/gh_mirrors/gr/great-tables Great Tables是一个强大的Python库,用于创建美观、…...
模组管理终极指南:用Nexus Mods App轻松管理你的游戏模组
模组管理终极指南:用Nexus Mods App轻松管理你的游戏模组 【免费下载链接】NexusMods.App Home of the development of the Nexus Mods App 项目地址: https://gitcode.com/gh_mirrors/ne/NexusMods.App 还在为游戏模组冲突、依赖缺失而烦恼吗?Ne…...
2025最权威的六大降重复率助手实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于深度学习跟自然语言处理技术的学术原创性检测系统,被称作AI论文查重…...
前端安全最佳实践
前端安全最佳实践:守护用户数据的第一道防线 在数字化时代,前端作为用户与系统交互的入口,其安全性直接影响用户体验和企业声誉。随着网络攻击手段的多样化,前端开发不再仅关注功能实现,更需要将安全视为核心需求。本…...
2026年Google 关键词排名监控实战教程
做 SEO 的人,几乎都有这种体验: 关键词刚优化上去,工具提示你已经在首页;结果过两天自己去搜,排名不一样;换个设备、换个网络看,结果又变了。更麻烦的是,频繁搜索还容易被验证、页面…...
