Spring 事务隔离级别和传播行为

用PyCharm+Scrapy打造你的第一个爬虫:从安装到实战(附完整代码) 本文详细介绍了如何使用PyCharm和Scrapy框架从零开始构建高效网络爬虫。通过环境配置、项目创建、核心爬虫逻辑编写到数据处理与存储的完整流程,帮助Python开发者快速掌握爬虫开发技巧,并附有实战代码示例。特别适合想要学习Scrapy框架和提升爬虫技能的开发者。 阅读详情

事务的隔离级别

名词的含义

名词含义原因
脏读一个事务读取了另一个事务还没有提交的数据一个事务对某数据进行更新,但并未提交,另一事务读取到了该数据,但是前一个事务如果回滚,那么后一个事务就读取到了错误数据
不可重复读一个事务多次读取同一个数据,结果不同一个事务在2次读取某数据之间时,另一个事务对数据进行了更新,导致前一个事务前后读取数据不一致
幻读一个事务多次查询符合某一条件的数据,结果不同一个事务在2次查询某一条件的数据之间时,另一个事务插入了一条符合该条件的数据,导致前一个事务前后查询数据不一致

隔离级别

隔离级别含义描述
SERIALIZABLE串行化事务串行执行,消耗最大
REPEATABLE READ可重复读避免不可重复读,但是会出现幻读
READ_COMMITTED读已提交避免脏读,但是会出现不可重复读和幻读
READ_UNCOMMITTED读未提交会出现脏读,不可重复读和幻读
DEFAULT默认使用数据库默认的事务隔离级别

事务的传播行为

传播行为描述
PROPAGATION_REQUIRED如果上下文已存在事务, 就加入该事务; 否则新建事务
PROPAGATION_SUPPORTS如果上下文已存在事务, 就加入该事务; 否则以非事务方式执行
PROPAGATION_NOT_SUPPORTED如果上下文已存在事务, 就挂起该事务, 以非事务方式执行完, 再恢复上下文事务; 否则直接以非事务方式执行
PROPAGATION_MANDATORY如果上下文已存在事务, 就加入该事务; 否则抛异常
PROPAGATION_NEVER如果上下文已存在事务; 就抛异常; 否则以非事务方式执行
PROPAGATION_REQUIRES_NEW如果上下文已存在事务, 就将上下文事务挂起,然后新建事务,直到新事务执行完,再恢复上下文事务; 否则新建事务
PROPAGATION_NESTED如果上下文已存在事务,就嵌套事务; 否则新建事务

嵌套事务

嵌套事务是子事务套在父事务中执行, 子事务是父事务的一部分. 在进入子事务之前, 父事务会建立一个回滚点.

如果子事务回滚, 父事务会回滚到进入子事务之前建立的回滚点

如果父事务回滚, 子事务也会跟着回滚. 因为父事务结束之前, 子事务不会提交.

提交事务时, 子事务先提交,然后父事务在提交

事务的使用

  1. Spring 注入PlatformTransactionManager的某一个具体实现类JtaTransactionManager 或 DataSourceTransactionManager 等
  2. 使用@Transactional标注在某一方法上
  3. 或者使用TransactionTemplate 来进行细粒度化的操作
  4. Spring 中事务默认回滚RuntimeException和Error的异常
    TransactionAspectSupport#invokeWithinTransaction() ->
    TransactionAspectSupport#completeTransactionAfterThrowing() ->
    DefaultTransactionAttribute#rollbackOn()

注意

在 Spring 中, 同一个类中的方法, 一个方法直接调用另一个方法, 第二个方法上的@Transactional是无效的
例如 :

@Service
public class MyServiceImpl implements MyService {
    public void test1() {
        test2();
    }

    @Transactional
    public void test2() {
    }
}
@RestController
public class MyController {
    @Autowired
    MyService myService;
    @GetMapping("/test1")
    public Object test1(){
        myService.test1();
        return "ok";
    }
    @GetMapping("/test2")
    public Object test2(){
        myService.test2();
        return "ok";
    }
}

在MyController#test1() 中, 通过myService.test1() 间接调用myService#test2(), @Transactional是不生效的
在MyController#test2() 中, 直接调用myService#test2(),@Transactional生效
另外传播行为和隔离级别也是一样, 因为它们的前提是@Transactional 生效

用Keil5给CH552G编程:手把手配置8051开发环境+LED闪烁实战 本文详细介绍了如何使用Keil5为CH552G单片机配置8051开发环境,并完成LED闪烁实战。从获取必要软件、安装WCH器件库到创建工程、编写程序及烧录,手把手指导开发者避开常见陷阱,特别适合从STC转向CH552G的开发者。 阅读详情

相关推荐

使用IntelliJ IDEA配置版本管理(SVN和Git)

在开发过程中,版本管理是必不可少的一部分,它可以帮助团队协作、管理代码历史记录,并且提供了代码回滚和分支管理等功能。本文将介绍如何使用IntelliJ IDEA配置版本管理,包括SVN和Git两种方式,另外列举了常见的问题并指导修复,以帮助开发者更高效地进行代码管理和协作。

2871

Spring 事务传播行为

Spring 事务传播行为 前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他 不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便 利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本 文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。 什么是事务传播行

qq_41884972的博客 164

老服务器焕新记:在Dell R730上折腾Nvidia K80显卡的完整记录(含Anaconda环境配置)

本文详细记录了在Dell R730服务器上为Nvidia K80计算卡安装驱动、配置CUDA及Anaconda环境的完整过程。文章重点解决了老旧硬件与CentOS 7系统的兼容性问题,提供了从BIOS设置、驱动版本精准匹配到Python机器学习环境搭建的实战指南,旨在帮助读者低成本挖掘旧服务器的GPU计算潜力。

weixin_29197835的博客 503

事务-1 事务隔离级别和Spring事务传播机制

本文介绍事务的基础篇:包括事务的概念和性质、MySql的隔离级别、Spring事务传播机制等,本文偏向于实践操作。

shengyu 5474

Qt加载百度地图详细流程(附带报错解决方法)

一篇文章看懂Qt如何加载出百度地图......

qq_60018273的博客 1605

MATLAB新手必看:Stewart平台运动学逆解从入门到实战(附完整代码)

本文详细介绍了如何使用MATLAB实现Stewart平台的运动学逆解,从基础原理到完整代码实现,涵盖并联机器人的数学建模、MATLAB编程和Simulink集成。通过实战案例和可视化分析,帮助新手快速掌握Stewart平台的运动学逆解技术,适用于机器人学和控制理论领域的研究与应用。

dream的博客 551

Spring中事务的隔离级别和传播机制

@Transactional详解之事务隔离级别及事务传播机制

关关的博客 2598

区块链技术在碳足迹数据存证与溯源中的应用深度解析

消费者扫描产品上的二维码,即可通过区块链浏览器查询到该产品的数字碳标签,并追溯其从茶园到货架的每一步碳足迹数据,以及这些数据是如何被智能合约自动计算和认证的,从而建立起强大的品牌信任。如果说哈希链解决了数据的“存”与“证”的问题,那么智能合约则解决了数据“用”与“管”的自动化问题。综上所述,虽然针对“碳足迹数据可追溯性”这一特定应用场景的公开、标准化的性能基准案例尚不丰富,但现有研究和企业级解决方案(特别是联盟链)已经证明,通过合理的技术选型和架构设计,区块链的性能可以满足实际商业需求。

百态·数智思维 | 聚焦大数据、量化与未来AI 1106

一看就理解_Spring事务的7种传播行为

事务传播行为 什么叫事务传播行为?听起来挺高端的,其实很简单。 即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。 Spring定义了七种传播行为: 现在来

wushijuewu 1156

2025美赛E题为农业留出空间(附代码+全保姆教程)Making Room for Agriculture

有机农业的核心在于减少化学投入,促进自然控制和可持续性。变量定义CCC: 作物种群III: 害虫种群PPP: 天然捕食者种群(蝙蝠、鸟类等)BBB: 生物多样性水平(以种类数量表示)SSS: 土壤健康指数(影响植物繁殖与作物生长)EEE: 农业生态系统的整体稳定性。

博客 1495

103.在 Vue 3 中使用 OpenLayers 控制图层来显示/隐藏地图

是一个强大的开源库,可以用于构建各种地理信息系统应用。在 Vue 3 中,我们可以结合。方法,可以直接控制某个图层是否可见,而不需要删除或重新创建图层。在开始之前,确保你已经搭建了 Vue 3 项目,并安装了。本文将详细介绍如何在 Vue 3 组合式 API (,并实现按钮控制地图的显示/隐藏功能。会导致 OSM 瓦片地图无法加载。方法控制地图图层的显示与隐藏。安装完成后,即可开始编写代码。在本教程中,我们介绍了如何在。来实现地图的显示/隐藏功能。来实现交互式地图,并通过。在 WebGIS 开发中,

小彭的博客 1561

事务的四种隔离级别和七种传播行为

事务(TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。多个操作作为一个整体向系统提交,要么都执行,要么都不执行。事务是一个不可分割的逻辑单元。脏读:简单来说,就是一个事务读取到了另一个事务未提交的数据。不可重复读:就是说,比如在A事务中进行多次相同的查询,B事务在A事务多次查询之间修改对应表中的数据,导致A事务多次读取的结果不一致。

aoteman_6的博客 226

华为OD机试真题 新系统2026-04-01 Java&Go【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 2058

spring 事务传播行为和事务隔离级别

1、Spring声明式事务 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一。 Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中申明。用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑

小鱼的专栏 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

事务隔离级别和传播行为_Spring事务的传播行为和隔离级别

1.事务的传播行为 事务的使用过程中,用的最多的传播行为是require,在大部分的mis系统里,可以对整个业务层切一个require的事务就可以满足需要。 但spring提供的不仅如此,对于复杂的业务,Spring也提供了相应的事务传播行为来满足业务需要。 Spring中的传1.事务的传播行为事务的使用过程中,用的最多的传播行为是require,在大部分的mis系统里,可以对整个业务层切一个re...

weixin_39604685的博客 4307

IEM模型,地表粗糙度模拟

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

Spring 事务的隔离级别和传播行为

一、简述事务是恢复和并发控制的基本单位。 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如 SQL、C++ 或 Java)书写的用户程序的执行所引起,并用形如 begin transaction 和 end transaction 语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。例如:在关系数据库中,一个事务可以是一条 S

ChineseSoftware的博客 637

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring五个事务隔离级别和七个事务传播行为

事务隔离级别 隔离级别 1 DEFAULT 使用底层数据库的默认隔离级别,大部分数据库,默认隔离级别都是READ_COMMITED 2 READ_UNCOMMITED 允许事务读取未被其他事务提交的更改。脏读,不可重复读,幻读都可能会出现. 3 READ_COMMITED 只允许事务读取已经被其他事务提交的更改,可以避免脏读,但不可重复读和幻读问...

江城宴的博客 1243

Spring事务传播行为和事务隔离级别

1、Spring声明式事务 声明式事务(declarative transaction management)是 Spring提供的对程序事务管理的方式之一。 Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中申明。用在Spring配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改

haohaoxuexiyai的博客 443

spring 的事务隔离级别和事务传播行为

spring 的事务隔离级别和事务传播行为 Spring的事务控制可以分为编程式事务控制和声明式事务控制。 编程式事务 将业务代码和事务代码放在一起书写,它的耦合性太高,开发中不使用 声明式事务 其实就是将事务代码(spring内置)和业务代码隔离开发, 然后通过一段配置让他们组装运行, 最后 达到事务控制的目的. 声明式事务就是通过AOP原理实现的. TransactionDefinition spring事务定义参数的接口,比如定义:事务隔离级别、事务传播行为等等 ① 事务隔离级别 isolation:

成为自己的太阳的博客 607

spring事务的5种隔离级别和7种事务传播行为

Spring五个事务隔离级别和七个事务传播行为 1.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 2.不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读...

A390hours的博客 388

Spring事务的隔离级别和传播行为

原文链接 Spring事务的隔离级别和传播行为 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL、C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。例如:在关系数据库中,一个事务可以是一条SQL语句,

pgrightwu的博客 249

spring的事务有几种方式?简述spring事务的隔离级别和传播行为

最近面试被问到了这个问题,之前没有总结过,还有点懵,稍微总结一下 一、spring的事务特性,这个就不多说了,ACID 二、spring实现事务的方式: 1.编码方式 2.spring配置方式 3.注解式 基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后再目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚...

成长之路 1万+

浅析Spring事务传播行为和隔离级别

7个传播行为。4个隔离级别。 Spring事务的传播行为和隔离级别[transaction behaviorand isolatedlevel] Spring中事务的定义: Propagation(key属性确定代理应该给哪个方法添加事务行为。这种属性最重要的部份是传播行为。)有下面选项可供使用: PROPAGATION_REQUIRED–支持当前事务,假设当前没有事务。就新建一个事务。 这是最常...

u012424449的博客 214

spring 事务隔离级别和传播行为_Spring 中的事务传播行为

可以搜索微信公众号【Jet 与编程】查看更多精彩文章祝大家七夕节快乐!背景介绍Spring 框架应该是每一个人 javaer 都必须接触和学习的技术,Spring 公司所提供的各种框架是 Java 开发行业可参考的重要标准之一。Spring 中有 7 种类型的事务传播行为。事务传播行为是 Spring 框架提供的一种事务管理方式,它是 Spring 框架之中非常重要的一个技术点,毕竟事务关系到应用...

weixin_39738755的博客 176
上一篇: spring cloud zuul 配置请求并发
下一篇: Spring Boot CORS配置
嘿嘿不错
博客等级 码龄11年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值