随堂笔记14-spring之事务

  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可以看成事物的工具类

posted @ 2023-03-09 11:32  小傻孩丶儿  阅读(16)  评论(0编辑  收藏  举报