Spring 框架中事务传播行为的定义

Spring 事务传播行为 spring 事务传播机制 阅读详情

这个 Propagation 枚举是 Spring 框架中事务传播行为的定义,它用于指定事务方法在调用另一个事务方法时,事务应该如何传播。这是在 Spring 的 @Transactional 注解中使用的关键配置之一。

事务传播行为详解

以下是每种传播行为的详细解释:

1. REQUIRED (0) - 必需(默认值)

  • 行为:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

  • 使用场景:最常用的传播行为,适用于大多数业务操作。

2. SUPPORTS (1) - 支持

  • 行为:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

  • 使用场景:适用于那些不需要事务但可以在有事务时参与事务的方法,如查询操作。

3. MANDATORY (2) - 强制

  • 行为:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

  • 使用场景:要求必须在已有事务中执行的方法,如果不是在事务中调用则会报错。

4. REQUIRES_NEW (3) - 新建

  • 行为:创建一个新的事务,如果当前存在事务,则把当前事务挂起。

  • 使用场景:需要独立事务的操作,不受外部事务回滚的影响(如日志记录)。

5. NOT_SUPPORTED (4) - 不支持

  • 行为:以非事务方式执行操作,如果当前存在事务,则把当前事务挂起。

  • 使用场景:需要在非事务环境下执行的操作,不希望受到事务管理的影响。

6. NEVER (5) - 从不

  • 行为:以非事务方式执行,如果当前存在事务,则抛出异常。

  • 使用场景:明确要求不能在事务中执行的操作。

7. NESTED (6) - 嵌套

注意事项

这个 Propagation 枚举是 Spring 事务管理的核心组成部分,它提供了灵活的事务边界控制能力,帮助开发者构建健壮的应用程序

  • 行为:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。

  • 使用场景:复杂业务中需要部分回滚的场景,嵌套事务可以独立回滚而不影响外部事务。

     

    @Service
    public class UserService {
        
        @Autowired
        private UserRepository userRepository;
        
        @Autowired
        private LogService logService;
        
        // 默认使用 REQUIRED 传播行为
        @Transactional
        public void createUser(User user) {
            userRepository.save(user);
        }
        
        // 明确指定传播行为
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        public void updateUserWithNewTransaction(User user) {
            userRepository.update(user);
        }
        
        // 组合使用不同传播行为的方法
        @Transactional(propagation = Propagation.REQUIRED)
        public void complexOperation(User user) {
            userRepository.save(user); // 参与当前事务
            
            // 创建一个独立的新事务,不受当前事务回滚影响
            logService.auditLog("User created: " + user.getName());
        }
    }
    
    @Service
    public class LogService {
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        public void auditLog(String message) {
            // 这个操作会在独立事务中执行
            // 即使调用方事务回滚,这个日志记录也会被提交
        }
    }

    实际应用场景

  • 资金转账:使用 REQUIRED 确保扣款和加款在同一个事务中

  • 操作日志记录:使用 REQUIRES_NEW 确保即使业务操作失败,日志也能被记录

  • 数据校验:使用 SUPPORTS 或 NOT_SUPPORTED 进行不需要事务的简单查询

  • 批量处理:使用 NESTED 实现部分失败部分成功的复杂业务逻辑

  • 默认的传播行为是 REQUIRED,这也是最常用的选项

  • NESTED 传播行为需要底层数据库支持保存点(Savepoint)

  • 传播行为的选择会影响应用的性能和数据一致性

  • 理解不同传播行为的区别对于设计正确的事务边界至关重要

深入理解Spring事务传播行为:原理、应用与实践 在现代企业级应用开发中,事务管理是确保数据一致性和完整性的关键技术。Spring框架作为Java生态中最流行的开发框架之一,提供了强大而灵活的事务管理能力。其中,事务传播行为(Transaction Propagation Behavior)是Spring事务管理的核心概念之一,它定义了多个事务方法相互调用时事务应该如何传播的规则。本文将全面剖析Spring事务的7种传播行为,包括它们的原理、应用场景和实际使用中的最佳实践。 阅读详情

相关推荐

学习笔记|多组率卡方检验和Fisher确切法|个案加权|规范表达|《小白爱上SPSS》课程:SPSS第十六讲 | 多组率卡方检验和Fisher确切法

学习笔记|多组率卡方检验和Fisher确切法|个案加权|规范表达|《小白爱上SPSS》课程:SPSS第十六讲 | 多组率卡方检验和Fisher确切法

Medlar_CN的博客 2965

事务的7种传播行为

一、什么是事务传播行为? 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。 例如:methodA方法调用methodB方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。 二、事务的7种传播行为 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。 事务传播行为是Spring框架独有的事.

沐雨金鳞 3万+

我爬取了某非法网贷后台系统数据,终于知道什么叫做利滚利滚利滚利了

我爬取了非法贷款的后台网站!

weixin_44042821的博客 2882

04蚂蚁-源码分析——2.手写Spring事务注解版本&事务传播行为

手写Spring注解版本事务 注意:如果是实现默认的事务的时候,在spring.xml文件里面一定要记得去开启事务—— <!--开启注解事务--> <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/></font> 注解 Jdk1.5新增新技术,注解。很多框架为...

qq_28461661的博客 220

virtuoso根据原理图绘制版图并联接_virtuoso画原理图

Virtuoso Schematic Editor 电路仿真一、Virtuoso Schematic Editor 实验目的:掌握电原理图(schematic)设计输入方法。 [1]启动 IC Design 软件 启动 软件: 开机后运行......2.绘制原理图 新建工程后打开的是默认的原理图文件 SCHEMATIC1 PAG...存盘 完成原理图的绘制后,将原理图存盘. 三 . 用 Check...

weixin_33536190的博客 4147

从 0 到 1 构建 Graph RAG 系统:本地图谱 + 通义千问落地实践

本文介绍了一个基于知识图谱的检索增强生成系统(Graph RAG),该系统结合领域知识图谱、语义检索和大模型问答,旨在提供结构化、精准的技术问答服务。文章详细说明了项目背景、目标、核心技术架构以及实现方法,包括本地图谱构建、Neo4j数据库接入、语义检索和大模型集成等关键环节。该系统支持混合检索、多轮问答和知识图谱关联理解,能够有效减少大模型幻觉,提升问答的准确性和可解释性。文中还展示了核心代码结构和流程图,呈现了从文档加载到图谱构建再到问答生成的完整流程。该系统适用于需要处理复杂领域知识的研发和数据分析场

m0_58378112的博客 1402

Spring事务传播行为概览

Spring定义了多种事务传播行为,用于控制事务的边界和交互方式。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 7707

CTF实战:手把手教你用Python破解转轮机加密(附完整脚本)

本文详细介绍了如何使用Python逆向破解转轮机加密,特别针对CTF比赛中的Crypto类题目。通过解析转轮机加密原理、实战Python脚本编写及调试技巧,帮助参赛者快速掌握破解方法,提升在攻防世界等CTF比赛中的解题效率。

silver的专栏 1117

Spring框架中@Transactional注解事务传播行为的深度剖析与应用探究

Spring框架是一个开源的、轻量级的Java应用程序框架,在整个Java开发生态中占据着举足轻重的地位,已然成为企业级应用开发的事实标准,为开发者提供了一整套解决方案,从而简化复杂应用的开发与管理工作(深入探索Spring 2.5.6版本的核心特性与架构-优快云博客;第四篇:Spring框架:Java企业级开发的核心- 掘金)。IoC容器:这是Spring框架的关键组成部分,是一个轻量级且非侵入式的容器,用于管理应用程序里对象及其依赖关系。

不想起名字 856

新手避坑指南:HT7036计量芯片SPI读取电压的完整流程(从复位到校准)

本文详细介绍了HT7036计量芯片的SPI读取电压完整流程,从硬件准备到校准设置,重点解析了复位引脚处理、SPI通信配置、芯片初始化及数据处理等关键步骤。针对常见问题如晶振焊接、SPI时序错误等提供实用解决方案,帮助开发者高效完成电压测量与校准。

weixin_30070339的博客 328

Spring Boot入门(03): 从零开始学习配置文件:掌握YAML和Properties,轻松应对多环境配置管理

在Spring Boot开发中,配置文件是非常重要的。本文将带领你从零开始学习配置文件,掌握YAML和Properties的语法,轻松应对多环境配置管理。无论是开发、测试还是生产环境,你都可以轻松切换不同的配置文件,并且能够灵活修改配置信息。

**My Coding Family** 4万+

今天来聊聊事务传播行为

到底什么叫事务的传播行为呢? 俺是个粗人,那么俺就用最白话的语言来说说俺心目中的事务传播行为。 事务这个我在此博客的其他帖子中也有专门说过:通俗的理解就是,一个需要做多件事的一个任务。事务是具有原子性,同一个事务中,所有的事情要么都没做,要么都做完了。这样说就应该理解了事务,那么事务的传播行为就可以很好理解了。 用具体的业务场景,我们来讲讲。比如哈, 老王我准备去逛逛某宝,然后...

第二颗大白菜 3074

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1063

Spring中的事务传播行为

虽然 MySQL 本身不直接支持事务传播行为的定义,但应用程序层(例如 Spring 框架)可以通过注解或配置来实现不同的事务传播行为,来更精确地控制事务的使用。MySQL 负责底层的事务管理,如开始、提交、回滚等操作,而事务传播的具体策略一般由应用程序逻辑来决定。

zzzzzengjf的博客 631

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

spring事务传播机制

spring定义了7中事务传播机制 spring事务传播机制 REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) 支持当前事务,如果没有事务会创建一个新的事务 SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) 支持当前事务,如果没有事...

秋枫 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

spring事务的7种传播行为

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

weixin_41979002的博客 2915

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

聊聊Spring的事物传播行为

文章目录传播行为传播行为的定义 传播行为 传播行为是方法之间调用事务采取的策略问题。在绝大部分的情况下,我们会认为数据库事务要么全部成功,要么全部失败。但现实中也许会有特殊的情况。例如,执行一个批量程序,它会处理很多的交易,绝大部分交易是可以顺利完成的,但是也有极少数的交易因为特殊原因不能完成而发生异常,这时我们不应该因为极少数的交易不能完成而回滚批量任务调用的其他交易,使得那些本能完成的交易也变...

赵树祥的博客 794

深入解析 Spring 框架中的事务传播行为

在 Spring 框架中,事务管理是一个至关重要的部分,而事务传播行为则是其中的核心概念之一。它决定了事务在多个方法调用之间的传播方式,对于确保数据的一致性和完整性具有关键作用。下面将详细介绍 Spring 框架中的七种事务传播行为,并结合使用场景说明其重要性。

Java开发者,专注后端技术分享,深耕框架实战与架构优化,持续输出优质技术干货。 1340

spring事务传播源码解析

前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做代码级别的解析。 基础概念 1.什么是事务传播行为? ...

后起秀厚勃发 1182

Spring事务管理——事务的传播行为

1、简介        当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。如下图所示: 2、传播属性的定义      ①、事务的传播属性可以再@Transactional注解的propagation属性中定义。如图所示:

gao199108的博客 421

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

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

weixin_39975900的博客 69

Spring的事务传播

事务传播行为是指,当一个事务方法被另一个事务方法调用时,事务应该如何传播。

thehateyou的博客 434

Spring事务de七种传播行为

前言:事务属性的种类:  传播行为、隔离级别、只读、事务超时。 记录一下spring事物的传播行为    传播行为定义了被调用方法的事务边界。 传播行为 解析 PROPAGATION_REQUIRED(传播需要) 支持当前事务,如果当前没有事务,就新建一个事务。这是默认的的选择。 PROPAGATION_SUPPORTS(传播支持) 支持当前事务,如果当前没有事务...

lwthad的博客 501

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

Spring的五种事务隔离级别 默认:默认使用数据库的隔离级别 读未提交 读提交 可重复读 串行化 Spring的七种事务传播行为 1. propagation_required: 表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。 否则会启动一个新的事务。 2. propagation_supports: 表示当前方法不需要上下文,如果事务存在当前事务的话,那么该方法会在这个事务中执行。 也就是说:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。 @Trans

困兽的博客 541

Spring事务传播类型

Spring框架提供了声明式事务管理,允许开发者通过配置来控制事务的行为。事务传播行为(Transaction Propagation Behavior)定义了在事务上下文中执行的方法如何与现有的事务关联。

付聪 368

Spring事务传播行为详解

Spring事务传播行为详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1810
上一篇: 凌晨2点自动备份mysql 数据库,mysql_backup.sh
下一篇: Spring Cloud 中用于声明一个 Feign 客户端的注解,它的作用是创建一个用于进行声明式 REST 调用的客户端接口。让我详细解释这个 @FeignClient 注解的各个部分及其作用:
学博成
博客等级 码龄17年 915粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值