Spring事务(Transaction)的事务传播行为及隔离级别

Linux-ftrace-双nop机制的实现 linux-ftrace内核追踪-双nop机制的实现原理 阅读详情

一、事物特性定义

        事物最重要的两个特性,是事物的传播级别和数据隔离级别。传播级别定义的是事物的控制范围,事物隔离界别定义的是事物在数据库读写方面的控制范围。

原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行;

一致性:事务的执行使得数据库从一种正确状态转换成另一种正确状态 ;

隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务;

持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障, 事务的处理结果也会得到保存。

二、七大事务传播行为

1.PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

2.PROPAGATION_SUPPORTS – 支持当前事务,如果当前没有事务,就以非事务方式执行。

3.PROPAGATION_MANDATORY – 支持当前事务,如果当前没有事务,就抛出异常。

4.PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。

5.PROPAGATION_NOT_SUPPORTED – 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6.PROPAGATION_NEVER – 以非事务方式执行,如果当前存在事务,则抛出异常。

7.PROPAGATION_NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

三、隔离级别

(1) 读未提交(read Uncommited): 在该隔离级别,所有的事务都可以读取到别的事务中未提交的数据,会产生脏读问题,在项 目中基本不怎么用, 安全性太差;

(2) 读已提交(read commited): 这是大多数数据库默认的隔离级别,但是不是 MySQL 的默认隔离级别;这个隔离级别满足 了简单的隔离要求:一个事务只能看见已经提交事务所做的改变,所以会避免脏读问题; 由于一个事务可以看到别的事务已经提交的数据,于是随之而来产生了不可重复读和虚读等 问题(下面详细介绍这种问题,结合问题来理解隔离级别的含义);

(3) 可重复读(Repeatable read): 这是 MySQL 的默认隔离级别,它确保了一个事务中多个实例在并发读取数据的时候会读取 到一样的数据;不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简 单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当 36 用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB 和 Falcon 存储引擎通 过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

(4) 可串行化(serializable): 事物的最高级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之, 它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争,一 般为了提升程序的吞吐量不会采用这个;

四、什么是嵌套事物?


嵌套事物是子事物套在父事物中执行,子事物是父事物的一部分,在进入子事物之前,父事物建立一个回滚点,叫save point,然后执行子事物,这个子事物的执行也算是父事物的一部分,然后子事物执行结束,父事物继续执行。重点就在于那个save point。以下两个问题点说明:
     
   :如果子事物回滚,会发生什么?
父事物会回滚到进入子事物前建立的save point,然后尝试其他的事物或者其他的业务逻辑,父事物之前的操作不会受到影响,更不会自动回滚。

        :如果父事物回滚,会发生什么?
父事物回滚,子事物也会跟着回滚!因为在父事物结束之前,子事物是不会提交的,子事物是父事物的一部分。


 

45、概率与模糊性:粗糙事件与模糊事件概率的探索 本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。 阅读详情

相关推荐

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

spring 中的事务

Spring中七种事务传播行为 1.PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 2.PROPAGATION_SUPPORTS – 支持当前事务,如果当前没有事务,就以非事务方式执行。 3.PROPAGATION_MANDATORY – 支持当前事务,如果当前没有事务,就抛出异常。 4.PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。 5.PROPAGATION_NOT_SUPPORTED

wu756271909的博客 363

树莓派上基于ONNXRuntime与Qt的C++模型部署实战指南

本文详细介绍了在树莓派上使用ONNXRuntime与Qt进行C++模型部署的完整流程。从环境配置、依赖安装到交叉编译优化,再到Qt界面集成与ARM架构性能调优,提供了实战指南和常见问题解决方案,帮助开发者高效完成边缘设备上的AI应用部署。

ik6789012的博客 337

Transactional注解中事务的传播行为

1.传播行为过程中,只要Requires_new被执行过就一定成功,不管后面出不出问题。异常机制还是一样的,出现异常代码以后不执行。Required只要感觉到异常就一定回滚。和外层事务(例子中的add方法上的事务)是什么传播行为无关。2.业务逻辑中,需要考虑哪些东西是一定要回滚的、哪些即使出错了不必要回滚的。3.在同类方法调用中一定要使用自己的代理对象(即自己注入IOC中的对象)调用。

别浪 2880

星宸科技SSD20x/SSD21X应用层DEMO实战指南:从入门到深度定制

本文详细介绍了星宸科技SSD20x/SSD21X系列芯片的应用层DEMO开发实战,从基础环境搭建到深度定制开发。内容涵盖DEMO资源获取、核心功能实现、第三方库集成以及性能优化技巧,帮助开发者快速掌握智能显示和多媒体处理应用的开发方法。特别适合嵌入式开发者在智能家居、工业控制等场景中应用。

weixin_42524226的博客 267

【Audio】基于STM32 I2S移植WM8978 Audio Codec驱动

1. WM8978简介 WM8978是一款低功耗,高质量的立体声编解码器,专为便携式应用,如数码相机或数码摄像机等。 该芯片集成了立体声差分麦克风的前置放大器,并包括扬声器、耳机和差分或立体声线输出的驱动器。外部组件要求减少,因为不需要单独的麦克风或耳机放大器。 WM8978的功能框图如下所示: 2. WM8978硬件连接 使用STM32F429+WM8978硬件平台,通过I2S接口来读写音频数据,I2C接口发送写命令控制WM8978相关功能。 STM32F429与WM8978的引脚连接如下:

ZHONGCAI0901的博客 1万+

Spring的transaction传播行为

在Spring源码中这七种类型被定义为了枚举。源码在org.springframework.transaction.annotation包下的Propagation,源码中注释很多,对传播行为的七种类型的不同含义都有解释,后文中锤子我也会给大家分析,我在这里就不贴所有的源码,只把这个类上的注解贴一下,翻译一下就是:表示与TransactionDefinition接口相对应的用于@Transactional注解的事务传播行为的枚举。

Mrstonee的博客 239

[VT虚拟化驱动]利用EPT实现无痕HOOK

本章利用讲EPT无痕HOOK

吾无法无天的博客 1万+

@Transctional事务传播机制(Propagation)

Transactional注解可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有public方法将都具有该类型的事务属性。当作用在方法级别时,会覆盖类级别的定义。当作用在接口和接口方法时,则只有在使用基于接口的代理时它才会生效,也就是JDK代理。在Spring中,事务的传播类型对方法执行顺序和结果都有影响。调用者和被调用者方法所定义的事务传播类型共同决定了代码的结果。ps.两个问题:Q1:类内部方法调用时,避免@Transcational失效的获取代理类方法待验证。

zhzh980的博客 7413

论文阅读:NeurIPS 2024 JailbreakBench: An Open Robustness Benchmark for Jailbreaking Large Language Model

论文指出评估越狱攻击存在挑战,如缺乏评估标准、成本和成功率计算方法不一致、许多研究无法复现。为解决这些问题,作者提出了JailbreakBench,这是一个开源基准测试,包含以下组件:持续更新的越狱提示库(jailbreak artifacts)。包含100种行为的越狱数据集,符合OpenAI的使用政策。标准化的评估框架,包括威胁模型、系统提示、聊天模板和评分函数。跟踪各种LLMs攻击和防御性能的排行榜。

CSPhD-winston的博客 1431

Windows 11 安装 Miniforge,配置国内源

本文详细介绍了在 Windows 11 系统中安装 Miniforge 的完整流程,包括下载、安装选项设置、配置国内镜像源(如清华大学源)以加速包管理,并启用 mamba 提升依赖解析与安装速度。同时涵盖 conda 与 mamba 的基本使用验证、PowerShell 初始化及环境提示符优化,帮助用户快速搭建高效、开源、免费的 Python 科学计算环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 4500

spring-transaction源码分析(1)概述和事务传播级别

spring-tx包使用注解驱动和AOP通知将事务开启、提交/回滚、以及复杂的传播机制封装了起来,开发者不再需要编写事务管理的代码,而是可以只关注自己的业务逻辑。 本文将简单介绍spring-tx使用步骤以及七种事务传播级别。

xuguofeng2016的博客 1052

【异常】CNB提示The bill authorization scope cannot access the current request.

摘要:CNB API返回403错误,表明当前token的授权范围无法访问目标仓库。主要原因是:1) REPO_SLUG填写错误,导致资源地址不匹配;2) CNB_TOKEN未授权目标仓库;3) 账号账单状态异常。解决步骤:先检查REPO_SLUG是否与CNB平台仓库地址完全一致;再确认CNB_TOKEN是否绑定目标仓库且有读取权限;最后检查账号账单是否正常且覆盖目标资源。完成排查后更新配置即可解决此授权问题。

奶爸的编程之路,也就一周冷个三天 663

spring事务(Transaction)的七种事务传播行为及五种隔离级别

spring事务(Transaction)的七种事务传播行为及五种隔离级别

Java仗剑走天涯 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

spring事务(Transaction)的七种事务传播行为及五种隔离级别

七种事务传播属性: 1.PROPAGATION_REQUIRED-支持当前事务,如果没有事务,就新建一个事务。这也是最常见的选择 2.PROPAGATION_SUPPORTS-支持当前事务,如果当前没有事务,就以非事务方式执行 3.PROPAGATION_MANDATORY-支持当前事务,如果没有事务,就抛出异常 4.PROPAGATION_REQUIRES_NEW-新建事务,如果当前存在...

codingToMaster的博客 490

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring事务的传播行为和隔离级别[transaction behavior and isolated level](转)

事务的传播行为和隔离级别[transaction behavior and isolated level] Spring中事务的定义:一、Propagation :  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPA

rioself的专栏 584

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring模块详解Ⅴ(Spring ORM & Spring Transaction)

对sping中的Spring ORM & Spring Transaction进行

AI+全栈,AI+应用,实操落地,前沿技术 2381

谈谈对数据库事务(基本属性、隔离级别)的理解以及spring事务传播行为的理解---Transaction

Transaction 也就是所谓的事务了,通俗理解就是一件事情。从小,父母就教育我们,做事情要有始有终,不能半途而废。事务也是这样,不能做一般就不做了,要么做完,要么就不做。也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。于是,人们就归纳出事务的第一个特性:原子性(Atomicity)。我靠,一点都不神秘嘛。 特别是在数据库领域,事务是一个非常...

javaboy 421

MyBatis事务管理模块详解

本文深入解析了MyBatis事务管理机制,重点介绍了其核心架构与实现原理。MyBatis事务管理模块位于基础支撑层,采用分层设计,通过Transaction接口提供事务控制能力。文章详细讲解了JdbcTransaction和ManagedTransaction两种实现方式,并阐述了事务的ACID特性。同时,通过代码示例展示了完整的事务生命周期管理流程,包括事务的开启、执行、提交/回滚和关闭等关键环节,以及自动提交与手动提交两种模式的差异。这些核心技术为开发者确保数据一致性提供了重要保障。

qq_41262225的博客 1249

事务隔离级别和传播行为_重新理解mysql的锁、事务隔离级别及事务传播行为

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。ACID,是指在可靠数据库管理系统(DBMS)中,事务(Transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。原子性原子性是指事务是一个不可再分割的...

weixin_39675963的博客 80

mysql的事物原则_mysql事务隔离级别和spring Transaction事务传播

事务的ACID原则是什么?原子性(atomicity):最小且不可分割的。要么都执行,要么都不执行。一致性(consistency):事务的执行使得数据库从一种正确状态转换成另一种正确状态隔离型(isolation):各事务同步执行时,所获取的数据,不受其他事务的影响。持久性(durability):事务提交之后,结果永远保存在数据库中。并发下事务会产生什么问题?脏读:事务A读取了事务B未提交的数...

weixin_35487052的博客 87

Spring—事务

Spring事务 有关事务的介绍和事务的特性之前以及看过了,但是那是在数据库层面,在Spring中提供了接口来实现事务 1.Spring事务管理的核心接口 上面的PlatformTransactionManager, TransactionDefinition, TransactionStatus就是Spring事务管理的三个顶级接口 2.PlatformTransactionManager事...

wintershii的博客 257

史上最烂 spring transaction 原理分析

务定义、事务作用、事务特性、生命周期、数据库事务三种运行模式、数据库事务控制、并发事务问题、隔离级别、数据库事务实现原理、spring 事务传播行为、spring 事务核心组件、spring boot 事务相关组件、事务嵌套原理、编程式事务与声明式事务、事务初始化过程、事务调用及执行过程、事务失效、事务与 java 锁、事务与多数据源。

后端为主,前端为辅。 1051

Spring事务中的若干问题

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。 transac...

180

Spring相关面试题:谈一谈你对事务的理解?

事务详解 •研究Spring事务,需要学习事务管理平台管理器:PlatformTransactionManager –在平台管理器中,通过事务的定义获得事务,从而进行事务提交或回滚操作。 •事务定义 TransactionDefinition 的详解: •传播行为:一个事务调用另一个事务,事务共享问题。 1.PROPAGATION_REQUIRED,required:支持当前事务,如果没有事务,创建一个新的。 A 有事务,B使用A的事务。(支持当前事务) A没有事务,B创建新的。() 1.PROPAGATI

Maynor的博客 804

Spring事务通知tx:advice标签

spring配置文件样例 简单的事务配置,对save/delete开头的方法加事务,get/find开头的设置为不加事务只读模式 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method n...

beastars1的博客 685
上一篇: FastDFS是什么?优缺点有什么?
下一篇: PostgresSQL学习(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值