首页 > 其他分享 >随堂笔记14-spring之事务

随堂笔记14-spring之事务

时间:2023-03-09 11:45:51浏览次数:46  
标签:回滚 14 spring 代理 随堂 threadlocal 执行 连接

  1. @EnableTransactionManagement工作原理:开启事务本质就是增加一个advisor,而使用@EnableTranscationManagement是向spring容器内添加俩个bean

    1. autoproxyRegister
    2. proxyTransactionManagerMentConfiguration

    其中autoproxyRegister注册一个bean,作用是开启自动代理,初始化后去寻找advisor类型的bean判断当前bean是否匹配advisor,是否利用动态代理产生代理对象

    另一个配置类,是判断类上是否有@Transaction注解并生成代理对象,代理对象执行方法时就会进入代理方法中

  2. spring事务基本执行原理:一个bean在创建的生命周期里,会判断是否有@transaction注解,若是存在则生成一个代理对象,在匹配advisor,若是匹配则执行代理方法,流程如下

    1. 利用所配置的platForm 创建一个数据库连接
    2. 修改autocommit为false
    3. 执行业务方法
    4. 无异常提交
    5. 异常回滚
  3. spring事务传播机制:比如当前场景,a在当前事务调用b,b需要开启一个新的事物执行

    1. 首先代理对象执行前利用事务管理器新建一个数据库连接a

    2. autocommit更改为false

    3. 数据库连接a放入threadlocal

    4. 执行a()

    5. 执行a()的时候代理对象调用b()

      1. 代理对象执行b()钱发现threadlocal存在了数据库连接a,则进行挂起
      2. 挂起是吧数据库连接a从threadlocal移除,放入挂起资源对象中
      3. 然后在新建一个数据库连接b
      4. autocommit改为false
      5. 放入threadlocal
      6. 执行b()
      7. 从threadlocal中拿到连接b及逆行提交
      8. 恢复挂起的a.把连接a放入threadLocal
      9. a()执行完后提交

      以上就是执行过程,判断是否存在事物就是看threadlocal中是否存在当前连接

  4. spring事物传播机制分类-案例分析

    1678332163547

    ​ 默认的传播机制为required,当前没有则新建事物,若有则在当前事务里执行

  5. 1678332319637

    ​ 执行时出现异常,俩个都回滚

  6. 1678332350859

    ​ 同一个事物内,异常了都回滚

  7. 1678332380604

    a出现异常回滚,test也会收到异常也会回滚

  8. 1678332456533

    test捕获了异常,但是手动设置了回滚,也会回滚

  9. transactionSynchronizationManager可以看成事物的工具类

标签:回滚,14,spring,代理,随堂,threadlocal,执行,连接
From: https://www.cnblogs.com/xiaoshahai/p/17197765.html

相关文章

  • 随堂笔记13-spring之aop底层源码
    动态代理:代理模式:为其他对象提供一种代理来控制对这个对象的访问,增强一个类中的某个方法,对其进行扩展调用分为俩类,一类是jdk的接口代理,需要有接口,另一种是cglib代......
  • vue-router SyntaxError: Unexpected token '{' (at xxx.vue:14:8)
    点进去后指向这一行:重新一行一行看,发现是整理代码的时候,以为有一个prop变量用不到,删了,结果在组件模板另一个地方有用。奇怪这类问题为什么编辑器不会提示出来。......
  • CF1714E 1400
    题意解析由图得a中不能同时存在5的倍数和非5的倍数。若全为5的倍数,将她们的末尾全部操作为0,判断相等即可。若全非5的倍数,将她们的末尾全部操作为2。由于2......
  • Spring设计模式——原型模式
    原型模式原型模式(PrototypePattern),是指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式主要适用于以下场景:类初始化消耗资源较多使用new生......
  • Spring设计模式——单例模式
    单例模式单例模式(SingletonPattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。饿汉单例模式饿汉单例模式在类的......
  • 狂神说SpringBoot学习笔记_暂存
    1.全面接管SpringMVC的配置!实操!2.yaml可以直接给实体类赋值。jar:webapp!自动装配Springboot到底帮我们配置了什么?我们能不能进行修改?能修改哪些东西?能不能扩展?xxxxAut......
  • P1427 小鱼的数字游戏
    P1427小鱼的数字游戏小鱼的数字游戏题目描述小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字a_i(长度不一定,以0结束),记住了然后反着念出来(表示结束的数字0就......
  • SSM SpringBoot vue药店管理系统
    SSMSpringBootvue药店管理系统登录首页普通管理员管理用户信息管理会员信息管理生产厂商管理类别信息管理药品信息管理进货管理销售信息管理联系我们管理系......
  • [Primer] 第 14 章 C++ 中的代码重用
    第14章C++中的代码重用14.1包含对象成员的类类初始化列表中有多个项目时,初始化的顺序为在类中的声明顺序而不是列表顺序。14.2私有继承使用私有继承,基类的所有公......
  • java springboot mybatis plus 3.4 实现执行任意 sql 语句
    试了SqlRunner一直失败,不知道原因,于是试了如下方法,完美解决。@AutowiredprivateSqlSessionFactorysqlSessionFactory;publicList<Map<String,Object>>exec......