认识 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…...
在Windows系统安装Docker
在 Windows 上安装 Docker,核心是安装 Docker Desktop(官方 GUI 工具),并启用 WSL 2(推荐,性能最好)。以下是最新、最稳的完整教程(Win10/Win11 通用)。 一、先检查系统与…...
Qwen3.5-2B保姆级教程:Gradio界面快捷键/拖拽上传/历史搜索技巧
Qwen3.5-2B保姆级教程:Gradio界面快捷键/拖拽上传/历史搜索技巧 1. 前言:认识Qwen3.5-2B Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛…...
AI未来3-5年十大核心方向
基于对人工智能领域趋势的分析,未来3-5年,以下十个核心方向将深刻影响技术演进与社会变革。1. 多模态大模型与全能模型 (Omni-Multimodal Models)技术发展:多模态预训练大模型将成为AI技术栈的标配,能够无缝理解和生成文本、图像、…...
救命!SQL注入居然这么好懂|小白零门槛实操复盘
家人们!网安进阶必冲的“入门王者”漏洞非SQL注入莫属——全程贯穿Web渗透,红队老哥打攻击必用它,蓝队防守也得重点盯防!纯干货实操双在线,刚入坑的网安小白直接码住,照着学不踩坑~先给各位搭子…...
基于Python的PC微信自动化探索:uiautomation+OpenCV+EasyOCR都
本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow(工作流) 框架,用于编排和协调多个智能体(Agent)或处理组件的执行流程。 本课将以通俗易懂的方式,帮助你理解 MAF Workflow 的核心概念…...
Freertos堆管理算法解析:如何为STM32选择最优内存方案
FreeRTOS堆管理算法深度解析:STM32工业控制项目中的内存优化实践 在工业控制领域,实时性和可靠性是系统设计的核心诉求。STM32系列微控制器凭借其优异的性能价格比,成为众多工业设备的首选平台。而FreeRTOS作为一款轻量级实时操作系统&#x…...
Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)反
从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...
Halcon图像分析小技巧:除了平均亮度,Deviation灰度偏差能告诉你什么?
Halcon图像分析进阶:灰度偏差(Deviation)的深度应用与实战解析 在工业视觉检测领域,我们常常过于关注图像的"平均亮度"这一指标,却忽略了另一个同样重要的参数——灰度偏差(Deviation)。就像医生不能仅凭体温判断病人健康状况一样&…...
从锁模到电光调制:光学频率梳技术全解析与五大主流品牌竞品对比
一.引言在精密计量与量子技术飞速发展的今天,光学频率梳(Optical Frequency Comb,OFC)作为一种革命性的光学测量工具,正在重新定义时间、频率和距离的测量精度。自2005年诺贝尔物理学奖授予光梳技术以来,这…...
Mem Reduct终极指南:一键解决Windows内存卡顿的完整教程
Mem Reduct终极指南:一键解决Windows内存卡顿的完整教程 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...
