Spring中事务的传播机制以及REQUIRED、REQUIRES_NEW、NESTED区别以及代码演示

news2024/12/21 10:57:07

​📒个人主页:热爱生活的李📒
​❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章​❤️
🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏

事务隔离级别+demo理解

    • A 有事务, B 使用 REQUIRED 级别
      • A 有异常 + B 有异常
      • A 有异常 + B 没有异常
      • A 没有异常 + B 有异常
      • A 没有异常 + B 没有异常
    • A 没有事务, B 使用 REQUIRED 级别
      • A有异常 + B有异常
      • A没有异常 + B有异常
      • A有异常 + B没有异常
    • A 有事务,B使用REQUIRES_NEW级别
      • A有异常 + B 有异常
      • A 有异常 + B 没有异常
      • A没有异常 + B有异常
    • A 没有事务,B使用REQUIRES_NEW级别
    • A 有事务,B使用NESTED级别
      • A有异常 + B有异常
      • A 有异常 + B 没有异常
      • A没有异常 + B有异常
    • A 没有事务,B使用NESTED级别
    • A 有事务,B使用SUPPORTS级别
    • A没有事务,B使用SUPPORTS级别
    • A有事务,B使用NOT_SUPPORTED级别
      • A有异常 + B有异常
      • A有异常 + B没有异常
      • A没有异常 + B有异常
    • A没有事务,B使用NOT_SUPPORTED级别
    • A有事务,B使用MANDATORY级别
    • A没有事务,B使用MANDATORY级别
    • A有事务,B使用NEVER级别
    • A没有有事务,B使用NEVER级别
    • 如何确定A有事务,B使用REQUIRED级别时候是合并到一个事务
    • 如何确定A 有事务,B使用REQUIRES_NEW级别时候是两个事务
    • 如何确定A 有事务,B使用NESTED级别时候是两个事务
    • 如何确定REQUIRES_NEW与NESTED级别下的两个事务的类型不一样
      • 查看建立连接的过程
      • 打断点看事务提交记录(都没有异常)
    • 所以REQUIRES_NEW与NESTED级别下都有两个事务的模型

学会Spring中事务的传播机制 + demo演示
事务的传播,是指一个方法调用另一个方法并将事务传递给它。事务的转播机制主要针对被调用者而言,控制它是否被传播或者被怎样传播。

在这里插入图片描述

在这里插入图片描述

演示都是基于A 调用 B

A 有事务, B 使用 REQUIRED 级别

A 和 B 事务合并为一个事务 ,有异常两个都回滚

A 有异常 + B 有异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据库中没有添加 A 数据也没有添加 B 数据

A 有异常 + B 没有异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

数据库中没有添加 A 数据也没有添加 B 数据

A 没有异常 + B 有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据库中没有 A 数据也没有 B 数据

A 没有异常 + B 没有异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

数据库中有A 数据 也有 B数据

ps:后面不再演示A 没有异常 + B没有异常,因为没有异常肯定成功了

A 没有事务, B 使用 REQUIRED 级别

B 按照有事务运行,A 按照没有事务运行

A有异常 + B有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据库中有A 数据 没有 B数据

A没有异常 + B有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

数据库中有 A 的数据 ,没有B 的数据

A有异常 + B没有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库 A 有数据,B也有数据

A 有事务,B使用REQUIRES_NEW级别

相当于新建了一个事务,但是影响关系是不一样的,A 不能影响 B ,但是 B 可以影响 A

A有异常 + B 有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据库中没有 A 数据 也没有 B数据

A 有异常 + B 没有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

数据库中有 B数据没有 A数据

A没有异常 + B有异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

数据库中没有 A 数据也没有 B数据

A 没有事务,B使用REQUIRES_NEW级别

相当于A没有事务 + B使用 REQUIRED级别事务

A 有事务,B使用NESTED级别

A有异常 + B有异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库中没有 A 数据也没有B 数据

A 有异常 + B 没有异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库没有 A数据也没有 B数据

A没有异常 + B有异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据库中没有 A 数据也没有 B数据

A 没有事务,B使用NESTED级别

与REQUIRED相同

A 有事务,B使用SUPPORTS级别

与REQUIRED级别中 A 有事务 类似,A 有事务就加入事务A

A没有事务,B使用SUPPORTS级别

相当于 A不使用事务 ,B也不使用事务

A有事务,B使用NOT_SUPPORTED级别

A有异常 + B有异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据库中没有数据A但是有数据B

A有异常 + B没有异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据库中有数据A没有数据B

A没有异常 + B有异常

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据库中有B数据没有A数据

A没有事务,B使用NOT_SUPPORTED级别

相当于A没有事务,B也没有事务

A有事务,B使用MANDATORY级别

相当于A有事务,B使用REQUIRED级别

A没有事务,B使用MANDATORY级别

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

抛异常,不能运行

A有事务,B使用NEVER级别

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

抛异常,不能运行

A没有有事务,B使用NEVER级别

相当于A没有事务,B也没有事务

如何确定A有事务,B使用REQUIRED级别时候是合并到一个事务

假设是两个事务

在这里插入图片描述

在这里插入图片描述

如何是两个事务
那么在我try-catch过后,方法A会执行成功

在这里插入图片描述

执行失败,所有required是合并为了一个线程

如何确定A 有事务,B使用REQUIRES_NEW级别时候是两个事务

测试方法同上

在这里插入图片描述

在这里插入图片描述

结果

执行成功,并且只有数据库中只有A的值没有B的值

在这里插入图片描述

在这里插入图片描述

如何确定A 有事务,B使用NESTED级别时候是两个事务

在这里插入图片描述

在这里插入图片描述

结果

数据库中有A没有数据B

在这里插入图片描述

如何确定REQUIRES_NEW与NESTED级别下的两个事务的类型不一样

查看建立连接的过程

REQUIRES_NEW级别下建立了两个连接
在这里插入图片描述

NESTED级别下只建立了一个连接

在这里插入图片描述

打断点看事务提交记录(都没有异常)

REQUIRES_NEW级别下

打了三个断点

在这里插入图片描述

在这里插入图片描述

调试过程

到第一个断点

数据库中都没有数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到第二个断点

数据库中还是没有数据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到第三个断点

methodB方法中的事务以及提交了
而methodA方法中事务还没有提交

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

运行完毕

数据库中已经有了methodA和methodB方法传入的数据

在这里插入图片描述

在这里插入图片描述

NESTED级别下

同样地方位置三个断点,只改methodB的事务级别,我把数据库中刚才那两条数据删除了

到第一个断点

数据库中没有A,B方法的数据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

到第二个断点

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到第三个断点

还是没有数据,但是REQUIRES_NEW级别下已经有B方法的数据了
这会数据库里面没有数据,说明methodB的事务还没有提交

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到运行完毕

已经有数据了,说明A、B两方法的事务是同时提交的

在这里插入图片描述

在这里插入图片描述

所以REQUIRES_NEW与NESTED级别下都有两个事务的模型

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

[计算机网络]第一章 概述 -- 1.1 计算机网络在信息时代中的作用 1.2 互联网概述

文章目录1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2 互联网基础结构发展的三个阶段第一阶段第二阶段第三阶段1.2.3 互联网标准化工作1.1 计算机网络在信息时代中的作用 21世纪是以网络为核心的信息时代,21世纪的重要重要特征&#xff1a…

小侃设计模式(二)-单例模式

1.概述 设计模式在粒度和抽象层次上各不相同,因此从不同的角度,分类形式也不同,目前存在两种较为经典的划分方式,即根据模式作用的范围、模式的目的来划分。根据模式主要是用于类还是用于对象,可将其划分为类模式和对…

【JavaWeb】Tomcat

1.JavaWeb是指所有通过java语言编写可以通过浏览器访问的程序的总称 请求是指客户端给服务器发送数据 响应是指服务器给客户端回传数据 2.Web资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种. 静态资源:html css js txt mp4视频 jpg图片 动态资源:jsp页面 se…

前端工程化基建探索:从内部机制和核心原理了解npm

大厂技术 坚持周更 精选好文 前言 本文【前端工程化基建探索】的第2篇,上一篇 前端工程化基建探索(1)前端大佬,你好! 当我们拉取一个前端工程化项目,都会通过npm/Yarn/pnpm 管理工具来安装项目的依赖&am…

大学解惑06 - 要求输入框内只能输入2位以内小数,怎么做?

请听题:有一个输入框,准备用于计算使用,要求点击“校验”按钮的时候进行验证,必须输入数字,并且只能是2位以内的小数,如果输入不合法,请给出提示,如果输入合法通过验证,则…

又是一篇教你摸鱼的文章,用Python实现自动发送周报给老板

前言 有没有哪个同志跟我一样,每周都要写工作周报 像我这种记性不好的,一个月四周忘记三次 索性就用Python写个小工具,让它每周帮我给老板发周报~ Github: Weekday 小工具 提出目标 源码.资料.素材.点击领取即可 想有一个工具能发邮件 目…

ARM 汇编基础

一、ARM架构 ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: 对内存只有读、写指令对于数据的运算是在CPU内部实现使用RISC指令的CPU复杂度小一点,易于设计…

WebShell箱子简介与原理

今天继续给大家介绍渗透测试相关知识,本文主要内容是WebShell箱子简介与原理。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授…

【面试】【项目】谷粒商城

视频链接 项目调查 这项目是这么多免费视频里最好的了。但依旧是demo。 最好还是买慕课网上的实战课,那些老师都有丰富的开发经验,有经验跟没经验讲的课是完全不同的。 谷粒商城我觉得是不low的,我很菜,毕业一年半被多次辞退&a…

数据结构之-【排序】

目录 排序 ⚡️冒泡排序 ⚡️选择排序 ⚡️插入排序 ⚡️堆排序 ⚡️归并排序 ⚡️快速排序 🏳️‍🌈排序 将数字从小到大的顺序排列 🔴冒泡排序 「冒泡排序」重复"从序列右边开始比较相邻两个数字的大小,再根据结果交换两个…

国产蓝牙耳机哪个牌子好?国产蓝牙耳机质量排行榜

随着3.5 mm耳机插孔被淘汰,特别是5G时代,让手机的内部结构变得越来越小,要将耳机插口塞进一个新的插口,无疑是一件非常困难的事情,而随着蓝牙技术的不断进步,蓝牙耳机也逐渐成为了如今人们配戴手机的首选&a…

Revit中阀门在项目中不可用无法与管道连接?

一、Revit中阀门在项目中不可用的问题 在项目中放置阀门时,有时候不可用,会出现如图1所示问题,无法与管道连接。 出现上图显示问题是因为在编辑族的时候,阀门两边的连接件原心没有完全重合。打开编辑族界面,可以看到如…

怎么辨别哪些才是真的低代码开发平台?

怎么辨别哪些才是真的低代码开发平台?第一次看到这个问题时,我就知道为什么有人会这么问了,目前低代码市场龙蛇混杂,普通人很难分辨出“真”低代码。所以这个问题中“真正”二字最为重要,圈起来,下面我们正…

【产品新体验】CSDN开发云·云IDE使用教程

【产品新体验】CSDN开发云云IDE使用教程1、初识云IDE1.1 拉去git项目1.2 密钥管理2、整体分析云IDE产品介绍 云IDE使用教程 免费使用地址:点击【云IDE】,即可开始创建工作空间啦~ CSDN最新产品【云IDE】来啦!【云IDE】将为各位技术er一键秒级…

No6-3.从零搭建spring-cloud-alibaba微服务框架,实现资源端用户认证与授权等(三,no6-3)

代码地址与接口看总目录:【学习笔记】记录冷冷-pig项目的学习过程,大概包括Authorization Server、springcloud、Mybatis Plus~~~_清晨敲代码的博客-CSDN博客 之前只零碎的学习过spring-cloud-alibaba,并没有全面了解过,这次学习p…

【Python】入门,总结与拾遗

前言 根据我的实践经验来看,对于有编程基础(如C语言)的同学来说,python入门应该很简单,而且加上官方文档做得非常好,所以个人建议python的学习主要去参考官网。本博客主要是记录那些容易忽略的关键点以及对…

蓝桥杯单片机第七届省赛题详细讲解(温度记录器)

看之前强烈建议先自己做一遍!!!演示效果题目讲解代码main.cds1302.cds1302.honewire.conewire.h工程文件演示效果 题目讲解 首先我们从系统框图看起: 做题之前要做的是把系统框图里面的各个模块先提前调试好!&#x…

StarRocks 的学习笔记

StarRocks 的学习笔记 文章目录StarRocks 的学习笔记1. 介绍1.1 StarRocks 特性1.2 使用场景1.3 OLAP 多维分析1.4 实时数据仓库1.5 高并发查询1.6 统一分析2. 系统架构2.1 StarRocks架构2.2 StarRocks业务架构2.3 StarRocks 数据生态2.4 *数据管理3. 特性3.1 MPP分布式执行框架…

ES6中的set与map

文章目录1.set1.1创建set集合1.2 如何对set集合进行后续操作1.3 如何与数组进行相互转换1.4 如何遍历1.5set的应用2.map集合2.1 如何创建map2.2 如何进行后续操作2.3 如何与数组转换2.4 遍历一直以来,JS只能使用数组和对象来保存多个数据,缺乏像其他语言…

介绍document部分自带的方法及属性,场景使用例如倒计时等

适用场景页面不显示(不看)触发方法停止运行逻辑,页面显示(看)触发方法继续运行逻辑。 (例如倒计时) 操作手法触发,浏览器多页签切换时触发,或者当前页隐藏浏览器&#xf…