孙哥Spring源码第28集

第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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值