zoukankan      html  css  js  c++  java
  • Spring 本地事务

     主要原理:

     事务的顶层接口:

    PlatformTransactionManager
    提供了3个方法,在申明式事务中这3个方法都是通过aop 调用的:

    1.getTransaction:

          进入相关需要被拦截的方法,aop调用getTransaction, 该方法检查ThreadLocal 是否已经绑定了Transaction ,如果没有就直接new 一个Transaction,并设置connection 和其它初始参数。

     2.doCommit doRollback

    业务方法执行结束后(正常结束或者抛异常)后,由拦截器执行该方法。


    关键点:


    1.Spring事物管理器进行了上层抽象,我们可以以jdbc 的
    DataSourceTransactionManager 事物管理器为切入点,观察代码是如何实现的。

    DataSourceTransactionObject 事物是如何绑定到ThreadLoacal的:

    3.事物传播策略如何实现的:



    PROPAGATION_REQUIRES_NEW 为例来说,
    如果当前线程已经绑定了事物,那么是如何实现新开一个事物的呢?

    首先将就是将旧的事物暂停supend(), 具体的暂停过程是讲旧的事物和线程解绑,然后新建一个事物,新的事物执行完毕后,再将旧的事物和线程绑定。
    这个过程就是借助DefaultTransactionStatus 来实现的,该类里面有两个关键属性:当前事物,挂起的事物。

    4.  DataSourceTransactionManager  是基于线程实现的, spring-webflux 中是不支持DataSourceTransactionManager  事物管理的。






  • 相关阅读:
    IDEA搭建普通java项目
    反射的学习
    解决Eclipse中文文档注释错位-处女座的悲哀!
    maven私服的搭建
    Springboot简介01
    git初识
    Servlet学习系列1
    搭建和启动javaWeb项目
    IDEA快捷键使用说明
    1.6 比较、掩码和布尔逻辑
  • 原文地址:https://www.cnblogs.com/kevin7234/p/10654866.html
Copyright © 2011-2022 走看看