Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring事务的传播机制及底层原理解析

Spring事务的传播机制及底层原理解析

作者头像
用户7353950
发布于 2024-05-20 07:38:10
发布于 2024-05-20 07:38:10
8820
举报
文章被收录于专栏:IT技术订阅IT技术订阅
Spring事务的传播机制是Spring框架中事务管理的重要组成部分,它定义了当一个事务方法被另一个事务方法调用时,两个方法之间的事务应该如何协调和传播。具体来说,Spring提供了七种事务传播行为:

1. REQUIRED (必须的,默认):

如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常见的选择,大部分业务场景都适用。

2. SUPPORTS (支持的):

如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。这种方法对于那些不需要事务也能正确执行,但在事务环境下运行也不会造成任何问题的方法特别有用。

3. MANDATORY (强制的):

必须在一个已存在的事务中执行,如果当前没有事务则抛出异常。

4. REQUIRES_NEW (需要新的):

总是创建一个新的事务,如果当前存在事务,则把当前事务挂起,新的事务结束后,再恢复之前被挂起的事务。

5. NOT_SUPPORTED (不支持):

不使用事务,如果当前存在事务,则将其挂起,直到该方法完成后再继续执行。

6. NEVER (绝不):

不允许在事务中执行,如果当前存在事务,则抛出异常。

7. NESTED (嵌套的):

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则如同 `REQUIRED` 一样,新建一个事务。嵌套事务可以独立于父事务进行提交或回滚,而不会影响父事务的状态。

通过在Service层方法上使用 `@Transactional` 注解,并设置其 `propagation` 属性,可以指定事务的传播行为,以满足不同场景下的事务管理需求。例如:

@Transactional(propagation = Propagation.REQUIRED)

public void someMethodInService() {

// ...

}

这样就能够确保在调用该方法时,遵循指定的事务传播规则。

Spring事务的传播机制底层原理涉及到Spring AOP(面向切面编程)和事务管理器的协同工作。当我们在服务方法上标注了`@Transactional`注解后,Spring通过动态代理机制(基于JDK Proxy或CGLIB)创建一个代理对象,该代理对象在方法调用前后插入必要的事务处理逻辑。 具体实现步骤如下: 1. 事务代理: - 当客户端调用服务方法时,实际上是调用Spring生成的代理对象的方法。 - 代理对象在方法调用前首先会通过Spring的事务管理器(如DataSourceTransactionManager、JpaTransactionManager等实现)来检查是否存在当前线程绑定的事务上下文。 2. 事务决策: - 根据`@Transactional`注解声明的事务传播属性,代理对象决定如何处理事务: - 创建新的事务(如`REQUIRES_NEW`) - 加入现有事务(如`REQUIRED`、`SUPPORTS`、`MANDATORY`) - 挂起现有事务(如`REQUIRES_NEW`、`NOT_SUPPORTED`) - 抛出异常(如`NEVER`) 3. 事务同步: -Spring利用Transaction

Synchronization

Manager来管理和维护事务相关的线程绑定信息,如使用ThreadLocal来存储事务状态和同步回调。 - 在事务开始、提交、回滚等关键节点,会触发相应的事务同步监听器,执行相应的清理和同步操作。 4. 事务边界管理: - 当方法调用结束后,代理对象会判断是否有未捕获的异常,如果有,根据事务的配置(rollbackFor、noRollbackFor)来决定是否回滚事务;如果没有异常,则提交事务。 5. 事务传播的具体实现: - 事务传播的实际动作由事务管理器来执行,比如当需要创建新事务时,事务管理器会调用连接(如JDBC Connection或Hibernate Session)的相关API来启动和管理事务。 通过上述机制,Spring能够在方法调用的前后透明地处理事务的开始、结束、回滚以及传播行为,使得开发者能够更加关注业务逻辑的实现,而不是底层的事务管理细节。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入理解 Spring 事务:从原理到实践
在企业级应用开发中,数据一致性是核心需求之一,而事务正是保证数据一致性的关键机制。Spring 框架对事务提供了完善的支持,简化了开发者对事务的管理。本文将从事务的基本概念出发,详细解析 Spring 事务的核心原理、传播行为、隔离级别及实践用法。
tcilay
2025/08/13
2010
Spring事务传播机制
本文主要是讲述Spring事务传播机制,也就是大家开发过程中多多少少会遇到的父方法调用子方法,或者A方法调用B方法时事务的传播机制问题,但是在开始讲Spring事务传播机制之前需要先讲一下Spring事务的几种传播类型,如图
六月的雨在Tencent
2024/03/28
2040
Spring事务传播机制
说说Spring事务的传播机制
最后琪姐说,修改了Spring的事务传播机制好了(应该是从默认的Required => Requires_New)。
春哥大魔王
2019/07/31
7290
spring事务如何使用,底层的原理是什么,一篇文章讲明白
事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。
一写代码就开心
2022/05/14
3840
spring事务如何使用,底层的原理是什么,一篇文章讲明白
spring事务传播特性
通过上面对事物的说明,有编程经验的人应该都很清楚为什么需要失误了吧?那就是为了防止出现业务逻辑上的出错,如算错账转错钱等。
袁新栋-jeff.yuan
2020/08/26
6020
spring事务传播特性
What?天天用Spring你竟然不知道事务的传播性?
在我们日常的开发中Spring是必备的技能,在面试的时候,这一块的知识也会着重地问,虽然每天都在使用,但是稍不注意就会出问题,今天这篇文章我们来详细的聊聊Spring的事务传播性,助力金三银四面试季。
用户1516716
2021/08/25
5370
What?天天用Spring你竟然不知道事务的传播性?
Spring事务传播机制的应用场景和解决方法
在实际项目中,我们可以使用Spring事务传播机制来管理事务并解决可能遇到的问题。
一凡sir
2023/11/07
6810
Spring事务传播机制的应用场景和解决方法
带你吃透Spring事务7种传播行为 | Spring第45篇
事务的传播行为用来描述:系统中的一些方法交由spring来管理事务,当这些方法之间出现嵌套调用的时候,事务所表现出来的行为是什么样的?
路人甲Java
2020/09/22
1.5K0
Spring事务专题(五)聊聊Spring事务到底是如何实现的
在上篇文章中我们一起学习了Spring中的事务抽象机制以及动手模拟了一下Spring中的事务管理机制,那么本文我们就通过源码来分析一下Spring中的事务管理到底是如何实现的,本文将选用Spring5.2.x版本。
程序员DMZ
2020/08/18
1.4K0
Spring事务专题(五)聊聊Spring事务到底是如何实现的
Spring事务传播机制
转载自 https://www.cnblogs.com/softidea/p/5962612.html
allsmallpig
2021/02/25
4530
Spring事务与非事务方法相互调用
序号 参数 含义 1 原子性(Atomicity) 事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。 2 一致性(Consistemcy) 事务前后,数据库的状态都满足所有的完整性约束。 3 隔离性(Isolation) 并发执行的事务是隔离的,一个不影响一个。通过设置数据库的隔离级别,可以达到不同的隔离效果 4 持久性(Durability) 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
chenchenchen
2020/05/26
12K0
Spring Boot的事务管理(一)
Spring Boot提供了对事务的全面支持。事务是指在数据库上执行的一系列操作,这些操作必须在单个、原子性的单位内执行,要么全部执行,要么全部回滚。在Spring Boot中,我们可以使用声明式事务管理来管理事务,这种方式可以极大地简化我们的代码,并将关注点从事务管理转移到业务逻辑上。本文将介绍Spring Boot中事务管理的基本概念和示例。
堕落飞鸟
2023/04/05
4290
Spring事务传播机制(最全示例)
我们在使用Spring框架进行开发时,经常在service层写很多方法,而且这些方法都是带事务的,那么Spring的事务怎么在多个方法之间传播呢?今天我们就仔细聊一聊。
小忽悠
2024/09/24
2K0
Spring事务传播机制(最全示例)
事务处理(一) - spring事务
Spring是通过org.springframework.transaction.PlatformTransactionManager接口来实现事务的管理。同时应对不同的场景,提供不同的PlatformTransactionManager实现类来实现管理事务。下面是常见的应用场景。
逝兮诚
2019/10/30
7200
18个示例详解 Spring 事务传播机制
事务的传播机制,是 spring 规定的。因为在开发中,最简单的事务是,业务代码都处于同一个事务下,这也是默认的传播机制,如果出现的报错,所有的数据回滚。但是在处理复杂的业务逻辑时,方法之间的调用,有以下的需求:
用户10384376
2023/02/25
2.6K0
18个示例详解 Spring 事务传播机制
面试官:Spring事务的传播行为有几种?
Spring事务支持两种方式,编程式事务和声明式事务,下面的例子使用声明式事务,即@Transactional注解的方式
Java识堂
2020/03/12
9340
Spring事务和事务传播机制(2)
在Spring框架中,事务管理是一种用于维护数据库操作的一致性和完整性的机制。Spring事务管理提供了灵活的方式来处理事务,包括事务的创建、提交、回滚以及事务的传播行为。
终有救赎
2023/10/16
3520
Spring事务和事务传播机制(2)
Spring高手之路24——事务类型及传播行为实战指南
定义:编程式事务是指通过显式的编程代码来管理事务的开始、提交和回滚。开发者需要手动控制事务的每个步骤。
砖业洋__
2024/11/23
2340
Spring高手之路24——事务类型及传播行为实战指南
【JavaEE进阶】Spring事务和事务传播机制
Spring 事务是 Spring 框架提供的一种机制,用于管理数据库操作或其他资源的一组相关操作,以确保它们在一个原子、一致、可靠和隔离的执行单元内进行。事务用于维护数据的完整性并支持并发访问数据库时的数据一致性。
xxxflower
2023/10/16
6050
【JavaEE进阶】Spring事务和事务传播机制
spring @Transactional 事务注解
value这里主要用来指定不同的事务管理器;主要用来满足在同一个系统中,存在不同的事务管理器。比如在Spring中,声明了两种事务管理器txManager1, txManager2.
庞小明
2019/05/25
1.9K0
相关推荐
深入理解 Spring 事务:从原理到实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档