孙哥Spring源码第28集

news2024/9/25 19:25:29

第28集 事务基础概念

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】

1、什么是事务

保证业务操作完整性的一种数据库机制 (driver 驱动)

2、事务特点 ACID

​ A 原子性 (多次操作 要不一起成功 要不一起失败 (部分失败 savepoint))
​ C 一致性 (事务开始时数据状态,事务结束是数据状态 一致 )
​ I 隔离性 (多个事务不能互相影响,做到隔离)
​ D 持久性 (事务操作的结果 ,永久持久化在数据库)

3、事务处理

3.1、单机版事务

  • JDBC,Hiberate,Mybatis底层都是Connection
  • Hibernate(JPA) 事务封装唉了Transaction (Connection)
    MyBatis事务封装了SqlSession (Connection)
  • 单机版事务是连接独立完成的
  • connection.setAutoCommit(false)
  • connection.commit()
  • connection.rollback()

3.2、分布式事务(Spring支持)

4、Service和Dao的connection如何保证Service DAO共用同一个Connection?

通过ThreadLocal,使用Spring也是把Connection绑定到了ThreadLocal。

2、Spring分布式事务是什么呢?

应用容器相关的 比如说 Jboss Weblogic Websphere,

3、声明式事务的几大要素是什么?

  • 1、原始对象

  • 2、额外功能

    • 控制事务的代码靠PlatformTransactionManager【接口】控制事务,实现类有:
      DataSourceTransactionManager (JDBC,Mybatis),HibernateTransctionManager(Hibernate JPA)
    • 事务属性
  • 3、切面

    • 图片:image-20230517075201071
    • 切面 等于 aop:pointcut:切入点 + aop:advisor:额外功能

4、控制事务靠的是什么?

PlatformTransactionManager接口

5、为什么PlatformTransactionManager是接口呢?

因为事务分为单机版事务和分布式事务,为了隔离他们的区别,所以设计成了接口,都有对应的实现类。

6、PlatformTransactionManager底层干了什么事情?

开启事务,事务提交,事务回滚

7、PlatformTransactionManager需要连接吗?

需要,需要Connecttion还需要DateSourceTransactinoManager

image-20230517074936827

8、事务属性有哪些?

事务属性是最难的,但是看似在编程当中是最没有用的。

  • 隔离属性 isolation
    • 定义了在进行并发访问时不同事务之间的隔离程度。常见的隔离级别有 READ_UNCOMMITTED 、READ_COMMITTED 、REPEATABLE_READ 和 SERIALIZABLE 等。
  • 传播属性 propagation
    • 定义了当前事务方法被其他事务方法调用时,当前事务如何进行管理控制,常见传播行为有 REQUIRED 、SUPPORTS 、MANDATORY 、REQUIRES_NEW 、NOT_SUPPORTED 和 NEVER 等。
  • 只读属性 readOnly
    • 只读事务标识开启后,表示当前事务仅能进行读操作,不能执行修改操作,从而提高并发性能。
  • 超时属性 timeout
    • 规定了事务的最长执行时间,即在规定时间内必须完成事务,否则事务会被自动终止回滚。
  • 异常属性 exception
    • 异常属性定义了触发事务回滚的异常类型列表。如果出现与事务属性中定义的异常类型相匹配的异常,则事务会回滚到先前的状态,以确保数据的完整性和一致性。

9、xml搭建环境

image-20230517211018933 image-20230517230839123

10、注解搭建环境

image-20230517231156370

第28集:学习目标总结

1、什么是事务?

保证业务操作完整性的一种数据库机制

保证二个操作要么一起成功,要么一起失败。

2、事务的特点是什么呢?

ACID
A:代表原子性,比如说两个操作要么都成功要么都失败
C:代表一致性,比如说转账前后我都是200块,不管怎么操作都是200块。
I:代表隔离性,多个事务之前不能互相影响,做到隔离。
D:代表持久化,事务操作的结果,要永久保存到数据库中。

3、Spring的事务的种类

  • 1、单机版事务和分布式事务。
    • 单机版事务:就是我们正常使用的那些,底层靠的是Connection,设置auto,commit,rollback
    • 分布式事务:指的是应用服务器而不是Web服务器,比如Jboss Weblogic Websphere
  • 2、分为声明式事务和编程式事务

4、声明式事务的几大要素是什么?

  • 切入点:是否加了Transtional注解
  • 额外功能:执行方法,有无异常,没有异常就提交,有异常就回滚。【额外功能+在前执行还是在后执行】
  • 事务属性:
    • 隔离属性
      • 读未提交
      • 读已提交
      • 可重复
      • 串行化
    • 传播属性
      • REQUIRES_NEW
        • 外部没有事务,则开启事务,如果外部存在事务则挂起原事务,执行新事物,新事物执行完了,还原旧事务
      • REQUIRED
        • 当前的这个业务方法 外部没有事务 开启事务 外部存在事务 则融合,这种情况下,所有操作都绑定到同一事务上,如果其中任何一个操作失败,整个事务都将回滚。
      • NOT_SUPPORTED
        • 不为这个方法开启事务
      • NEVER
        • 必须在一个没有的事务中执行,否则抛出异常
      • MANDATORY
        • 必须在一个已有的事务中执行,否则抛出异常
      • NESTED
        • 如果当前没有事务 和REQUIRED效果一样,创建一个新的事务并将方法加入该事务。如果已经存在一个事务中,则创建一个嵌套事务,并在嵌套事务中执行所有操作。嵌套事务有自己的保存点,并且可以独立于外部事务进行提交或回滚。如果嵌套事务失败,会回滚嵌套事务并抛出异常,但不会影响到外部事务。只有当所有事务都完成或成功提交后,才将更改保存到数据库。
        • Propagation.REQUIRED 不同,Propagation.NESTED 可以实现“点对点事务”,即在应用程序中拆分长事务,使其可以在较小的单元操作上运行。这样可以避免长时间锁定数据库资源,提高并发性能和可伸缩性。
        • 总之,Propagation.NESTED 可以为 Spring 应用程序提供更加灵活的事务管理方式,但需要注意它的使用场景和规则,避免出现不必要的问题。
    • 超时属性
      • 到达这个时间没有执行完成就会回滚
    • 异常属性
      • 配置异常

5、Spring事务NESTEDREQUIRED的区别

  • NESTED允许内部事务拥有自己的事务提交或回滚,可以进行粒度更细的控制;REQUIRED所有操作都将绑定到同一事务中。
  • 如果内部事务因为某些原因失败(例如违反唯一性约束),它会回滚并抛出异常,但外部事务仍然会继续进行。因此,NESTED的回滚影响只局限于它自己的操作,而REQUIRED可能会造成整个事务的回滚。

6、控制事务靠的是什么?底层干了什么事情?

  • 1、靠的是PlatformTransactionManager这个接口,由于区分了单机版事务和分布式事务,根据实现类进行具体实现
  • 2、底层干的其实还是开启事务,事务提交,事务回滚。

7、一般怎么应用呢?

现在的话xml用的比较少了,但是如果说你想全局控制@Transtional,而不是一个一个的去打注解 去标记,可以用xml。一般情况下都是使用@Transactional

8、spring传播属性解决的是什么问题?

嵌套事务问题

9、嵌套事务问题的核心是什么呢?

只保证在一个时刻,有一个事务或者其他 事务 挂起关闭。和锁的概念有点像

10、而嵌套事务出现的原因是什么呢?

service调用service

11、分布式事务的调用方案解决的核心是什么?

需要有人通知我有没有成功,有个全局监管者。

12、分布式事务如果不用框架,不用MQ你怎么解决?

记录好结果进行反向调用解决,而反向调用如果失败了怎么办?需要补偿机制。

image-20230518141051375

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

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

相关文章

【狐妖小红娘】真人剧,王权篇主演定下,二搭情侣,网友:别魔改

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 近几年【改编】基本成为国内影视剧创作的主流风向,有不少电视剧都是由网文改编而成,尽管国内网文市场庞大,也有不少优质的网文小说,但也耐不住大批量地改编&…

基于Dockerfile搭建LNMP环境

准备工作 #关闭防火墙和防护机制 systemctl stop firewalld systemctl disable firewalld setenforce 0 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.name""docker1" mynetwork#设置自定义网络模式,模…

海外ASO优化之提高应用下载量的策略有哪些

ASO也被称为应用商店优化,是优化软件使其排名变得更高一个的过程,这提高了应用的可见度,并增加了下载量。ASO并不像看上去那么容易,它需要多次A/B测试和观察,才能确定哪种策略更有效。 1、应用的界面和用户体验。 如果…

泛微OA与ERP集成的关键要点

泛微OA办公系统与ERP系统的集成是为了实现企业内部各个系统之间的数据共享和协同工作,提高工作效率和管理水平。下面将详细介绍泛微OA办公系统如何与ERP系统集成以及轻易云数据集成平台在该过程中发挥的重要作用。 集成方式 泛微OA办公系统与ERP系统的集成可以采用…

Stable Diffusion 最新Ebsynth Utility脚本生成AI动画视频

早期的EbSynth制作的AI视频闪烁能闪瞎人的双眼,可以通过【temporalkit+ebsynth+controlnet】让视频变得丝滑不闪烁,现在又多了一个新的方法,在最新版本的Ebsynth Utility中可以通过脚本进行操作设置,更加简单方便。 插件安装 在你已经安装好Ebsynth之后,如果还没有安装好…

iPad平板哪种电容笔更好用?apple pencil的平替

Ipad平板是很有必要买一支电容笔的。我们究竟要不要购买苹果的原装电容笔呢?事实上,如果只是单纯的记录和记录,并不需要花费太多的金钱选择原装电容笔。平替电容笔不单品质优良,用于书写上笔迹流畅,是极佳的学习与工作…

uni-app:实现view元素强制换行(解决长字符和英文字符不换行问题)

效果 换行前 换行后 核心代码 word-wrap: break-word; 或 word-break: break-all; 完整代码demo <template><view><view class"all_style"><view class"line1">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</view>…

浅谈制造业数仓建设

制造业一直是国民经济的支柱产业&#xff0c;而随着全球市场竞争的加剧和客户需求的不断变化&#xff0c;制造业企业面临着诸多挑战。为了应对这些挑战&#xff0c;制造业企业需要借助先进的信息技术手段&#xff0c;提高生产效率、降低成本、提供个性化的产品和服务。在这个背…

开源联合、聚力共赢丨2023 CCF中国开源大会会议通知(第二轮)

会议简介 2023 CCF中国开源大会&#xff08;CCF ChinaOSC&#xff09;拟于2023年10月21日至22日在湖南省长沙市北辰国际会议中心召开。大会由中国计算机学会&#xff08;CCF&#xff09;与开放原子开源基金会主办&#xff0c;CCF开源发展委员会、湖南先进技术研究院承办&#…

靶场上新:PigCMS任意文件上传漏洞

本文由掌控安全学院-江月投稿 封神台新上线漏洞复现靶场&#xff1a;PigCMS action_flashUpload 任意文件上传漏洞。 漏洞详情&#xff1a; PigCms&#xff08;又称小猪CMS&#xff09;是一个基于phpmysql的多用户微信营销系统&#xff0c;是国内使用较多、功能强大、性能稳定…

【20】c++设计模式——>组合模式

组合模式定义 C组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;他允许将对象组合成树形结构来表示“部分-整体”的层次结构&#xff1b;在组合模式中有两种基本类型的对象&#xff1a;叶子对象和组合对象&#xff0c;叶子对象时没有子对象…

【ARM Coresight 系列文章19 -- Performance Monitoring Unit(性能监测单元)

文章目录 1.1 PMU 介绍1.2 PMU 寄存器1.2.1 PMU 管理寄存器1.2.2 PMU 外设识别寄存器1.2.3 PMU 组件识别寄存器1.3 性能监控事件1.3.1 Cortex-A9 特定事件1.1 PMU 介绍 许多体系结构都包含 PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件…

【四旋翼飞行器】模拟四旋翼飞行器的平移和旋转动力学(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

vue-router 详解

可参见: vue-router 详解_vue router_七月J的博客-CSDN博客 https://www.cnblogs.com/chen-ao666/p/17144552.html vue-router的使用 使用vue-router的步骤: 创建路由组件 配置路由映射: 组件和路径映射关系 使用路由: 通过和 <router-link>: 该标签是一个vue-router中…

云原生边缘计算KubeEdge安装配置(二)

1. K8S集群部署&#xff0c;可以参考如下博客 请安装k8s集群&#xff0c;centos安装k8s集群 请安装k8s集群&#xff0c;ubuntu安装k8s集群 请安装kubeedge cloudcore centos安装K8S 2.安装kubEedge 2.1 编辑kube-proxy使用ipvs代理 kubectl edit configmaps kube-proxy -…

电子电路学习笔记——LDO稳压器 NCP114ASN330T1G的应用

关于LDO稳压器&#xff08;Low-Dropout Regulator&#xff09;&#xff1f; 是一种用于电源管理的集成电路&#xff0c;常用于将高电压转换为较低且稳定的工作电压。LDO稳压器可以在输入电压几乎等于输出电压的情况下工作&#xff0c;因此它们具有较低的压降&#xff08;dropo…

leetcode797. 所有可能的路径(java)

所有可能的路径 题目描述图的遍历 题目描述 难度 - 中等 leetcode797. 所有可能的路径 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节…

伦敦银最新走势不利怎么办

跟其他的投资品种一样&#xff0c;伦敦银的价格走势在不停的变化&#xff0c;而且由于本身产品具有较高的资金杠杆&#xff0c;所以万一行情走势变得不利&#xff0c;在很短的时间之内就会对投资者的账户造成严重损失&#xff0c;所以投资者应该对此作好充分的准备。 伦敦银的最…

开源ERP和CRM套件Dolibarr

什么是 Dolibarr &#xff1f; Dolibarr ERP & CRM 是一个现代软件包&#xff0c;用于管理您组织的活动&#xff08;联系人、供应商、发票、订单、库存、议程…&#xff09;。它是开源软件&#xff08;用 PHP 编写&#xff09;&#xff0c;专为中小型企业、基金会和自由职业…

什么是云计算?云计算简介

其实“云计算”作为一个名词而言&#xff0c;那是相当成功滴。很多人都有听过。但提及云计算”具体是什么?很多人&#xff0c;知其然&#xff0c;却不知其所以然! 利用软件将这些成千上万不可靠的硬件组织成一个稳定可靠的IT系统&#xff0c;以此支撑其公司的IT基础服务。这家…