简单讲讲spring事务的传播机制

事务传播机制就像是一个指挥家,控制着程序中的各种操作(比如修改数据库)何时开始、何时结束,以及如何处理错误。

  1. 保证数据一致性:想象一下你在网上购物,你需要先从银行账户扣款,然后再把商品加入你的购物车。这两步操作必须都成功,或者都不成功。如果只有一步成功,那么就会出现问题:比如钱被扣了,但商品没有到购物车。事务就是用来保证这两步操作要么都成功,要么都失败。

  2. 处理复杂的业务逻辑:有时候,一个大的操作可能包含很多小的操作。比如,一个大的操作是完成一次旅行,这可能包括订机票、订酒店、租车等小的操作。这些小的操作可能需要单独完成,比如你可能想要先订好机票,再去订酒店。事务传播机制就可以帮助我们按照我们想要的方式,完成这些操作。

  3. 提高性能:有些操作可能不需要事务,比如查看商品信息。在这种情况下,我们可以避免使用事务,这样可以让程序运行得更快。

  4. 提高可维护性:事务传播机制可以让我们更好地理解和控制程序中的操作,这样在出现问题的时候,我们可以更容易地找出问题的原因,并修复它。

  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. REQUIRED(需要):如果已经有事务了,我就加入这个事务,如果没有,我就新建一个事务。

  2. SUPPORTS(支持):如果已经有事务了,我就加入这个事务,如果没有,那我就不用事务。

  3. MANDATORY(必须):我必须要有事务才能工作,如果没有事务,我就报错。

  4. REQUIRES_NEW(需要新的):我需要一个全新的事务,如果已经有事务了,把它暂停,我要新建一个事务。

  5. NOT_SUPPORTED(不支持):我不需要事务,如果有事务,就把它暂停。

  6. NEVER(永不):我永远不需要事务,如果有事务,我就报错。

  7. NESTED(嵌套):如果有事务,我就在当前事务中创建一个嵌套事务,这个嵌套事务是独立的,可以先于当前事务提交或回滚。如果没有事务,我就新建一个事务。

今天的分享结束了,希望你能有所收获,拜拜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wireshark使用实训---分析IP包

1.Wireshark简介和作用 Wireshark是一个开源的网络分析工具,用于捕捉和分析网络数据包。它可以帮助网络管理员和安全专家监控和解决网络问题,同时也可以用于学习和教学网络通信原理。 Wireshark可以在网络中捕获和分析传输的数据包,包括协议…

【Java初阶(五)】类和对象

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1. 前言2.面向对象的认识3.类的认识4. 类的实例化4.1什么是实例化4.2类和对象的说明 5.this引用6.对象初始化6.1 构造方法 7.static关键字8.代码块8.1 …

探索Python中的集成方法:Stacking

在机器学习领域,Stacking是一种高级的集成学习方法,它通过将多个基本模型的预测结果作为新的特征输入到一个元模型中,从而提高整体模型的性能和鲁棒性。本文将深入介绍Stacking的原理、实现方式以及如何在Python中应用。 什么是Stacking&…

算法-数据结构

算法-数据结构 金无足赤人无完人,在处理实际问题的时候我们可以使用到很多合适的数据结构,但目前还没有一个数据结构可以称的上完美。查询速度快的,插入的速度就会慢;插入速度和查询速度都快得,占用的空间就会多&…

PTAxt的考研路

xt是我院19级专业第一,但他认为保研并不能展示他全部的实力,所以他在22年初试一结束就加入了23考研的队伍中,并且他为了填补我院近些年来无北大研究生的空白,毅然决然决定扛起19级的大旗,在学校百年华诞之际献上他最诚…

Springboot项目之mybatis-plus多容器分布式部署id重复问题之源码解析

mybatis-plus 3.3.2 部署多个pod id冲突问题 配置: # 设置随机 mybatis-plus.global-config.worker-id: ${random.int(1,31)} mybatis-plus.global-config.datacenter-id: ${random.int(1,31)}源码解析:MybatisSqlSessionFactoryBean 重点&#xff1a…

mysql数据库查询

MYSQL数据库的搭建 今日目标: 1.搭建数据库 2.实现数据库的增删改查 00-回顾 #dos的常用指令 1. 切换盘符: 盘符名: 2. 切换上一级: cd ../ 3. 切换下一级: cd 目录名 4. 查看当前目录下的所有子目录和子文件: di…

光明源@智慧公厕赋能“厕所革命”主要体现在哪些方面?

当我们提及厕所,不再仅是简单的卫生设施,而是一种对生活品质的关怀与呵护。智慧公厕,作为厕所革命的引领者,以其独特的拟人魅力,彰显着人性化关怀的新风尚。今日,让我们一同探索,智慧公厕是如何…

数据库备份工具(实现数据定时覆盖)

数据库备份工具(实现数据定时覆盖) 永远热爱,永远执着! 工具介绍 自动化测试数据库更新调度程序 这段 Python 脚本自动化了每天定时从生产数据库更新测试数据库的过程。它利用了 schedule 库来安排并执行每天指定时间的更新任务…

在for循环加判断条件当条件都满足时,同时显现的解决方法

一、代码示例 function fu(s) {str ;ste ;console.log(s);let Things s;for (let i 0; i < Things.length; i) {if (Things[i].pid kk) {console.log(Things[i].pid);ste <div class"commodity_nei"><div class"zxc_pic"><div cl…

[CISCN2019 总决赛 Day2 Web1]Easyweb ----不会编程的崽

CISCN的题质量还是很高的。 又是这熟悉的登陆界面。爆破&#xff1f;sql&#xff1f;还是xxe等。先看源码 估摸着也是sql注入。但似乎不是常规注入。同时扫描后台的结果应该也出来了&#xff0c;发现robots.txt 有点懵&#xff0c;后边看了大佬的wp才知道&#xff0c;提示的是*…

车载测试工具 canoe如何使用

其实canoe的使用非常的简单&#xff0c;结合自己的工作项目多多操作就可以了

openssl 升级1.1.1.1k 到 3.0.13

下载 https://www.openssl.org/source/ tar -zxvf openssl-3.0.13.tar.gzcd openssl-3.0.13/./config enable-fips --prefix/usr/local --openssldir/usr/local/opensslmake && make install 将原有openssl备份 mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/i…

LeetCode Python - 73. 矩阵置零

目录 题目描述解法方法一&#xff1a;数组标记方法二&#xff1a;原地标记 运行结果方法一方法二 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;…

项目立项管理

目录 1.概述 2.项目建议与立项申请 3.项目可行性研究 3.1.内容 3.2.初步可行性研究 3.3.详细可行性研究 4.项目评估与决策 5.总结 1.概述 本文的目录结构参考了《信息系统项目管理师教程&#xff08;第四版&#xff09;》。 项目立项管理是一项全面评估准备投资工程的多…

Redis到底是多线程还是单线程?

Redis6.0之前&#xff1a;是单线程模式。 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。 Redis6.0之前&#xff1a;单线程 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。

适用于 Android 的 10 个优秀的数据恢复工具

在当今快节奏的数字时代&#xff0c;丢失 Android 设备中的重要数据可能是一场噩梦。无论是难忘的照片、重要的联系人还是重要的工作文档&#xff0c;您都需要一个可靠的恢复工具来恢复您的数据。值得庆幸的是&#xff0c;有许多高效的 Android 数据恢复工具可以帮助您恢复丢失…

【python】flask各种版本的项目,终端命令运行方式的实现

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

操作系统面经-多线程同步的四种方式

对于多线程程序来说&#xff0c;同步是指在一定的时间内只允许某一个线程来访问某个资源。而在此时间内&#xff0c;不允许其他的线程访问该资源。可以通过互斥锁&#xff08;Mutex&#xff09;、条件变量&#xff08;condition variable&#xff09;、读写锁&#xff08;reade…

XUbuntu22.04之跨平台日历工具(二百二十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…