当前位置 博文首页 > L-Java:Spring 事务源码(6)—createTransactionIfNecessary处理

    L-Java:Spring 事务源码(6)—createTransactionIfNecessary处理

    作者:[db:作者] 时间:2021-07-25 15:55

    ??基于最新Spring 5.x,详细介绍了Spring 事务源码,包括createTransactionIfNecessary方法,该方法尝试创建并处理事务,是核心方法。

    ??此前的文章中,我们介绍了Spring AOP中最重要的类之一——TransactionInterceptor事务拦截器的工作总体流程,以及invoke方法的前半部分源码。现在我们继续向后看,我们来看看最重要的createTransactionIfNecessary方法的源码。

    Spring 事务源码 系列文章

    Spring 5.x 源码汇总

    Spring 事务源码(1)—<tx:advice/>事务标签源码解析

    Spring 事务源码(2)—<tx:annotation-driven/>事务标签源码解析

    Spring 事务源码(3)—@EnableTransactionManagement事务注解源码解析

    Spring 事务源码(4)—BeanFactoryTransactionAttributeSourceAdvisor注解事务通知器源码解析

    Spring 事务源码(5)—TransactionInterceptor事务拦截器与事务的AOP增强实现

    Spring 事务源码(6)—createTransactionIfNecessary处理事务属性并尝试创建事务【两万字】

    Spring 事务源码(7)—事务的completeTransactionAfterThrowing回滚、commitTransactionAfterReturning提交以及事务源码总结【一万字】

    文章目录

    • Spring 事务源码 系列文章
    • 1 createTransactionIfNecessary尝试创建并开启事务
    • 2 TransactionInfo事务信息
    • 3 getTransaction获取/开启事务
      • 3.1 doGetTransaction获取事务连接
        • 3.1.1 TransactionSynchronizationManager事务同步管理器
        • 3.1.2 TransactionSynchronization事务同步
        • 3.1.3 obtainDataSource获取数据源
        • 3.1.4 getResource获取已存在的连接
      • 3.2 isExistingTransaction是否已存在事务
      • 3.3 suspend挂起事务
        • 3.3.1 isSynchronizationActive是否激活事务同步
        • 3.3.2 doSuspendSynchronization挂起事务同步
        • 3.3.3 doSuspend挂起事务
      • 3.4 startTransaction开启新事物
        • 3.4.1 newTransactionStatus开启新事物
        • 3.4.2 doBegin真正开启事务
          • 3.4.2.1 prepareConnectionForTransaction准备事务连接
          • 4.4.2.2 prepareTransactionalConnection优化只读事务
          • 4.4.2.3 determineTimeout确定超时时间
          • 4.4.2.4 setTimeoutInSeconds设置超时deadline
          • 4.4.2.5 bindResource绑定资源到resources
          • 4.2.4.3 prepareSynchronization准备事务同步
        • 3.2.5 prepareTransactionStatus准备事务状态
        • 3.2.6 handleExistingTransaction处理已存在事务
        • 3.2.6.1 createAndHoldSavepoint创建保存点
    • 4 小结
    cs