1.0 客户端启动流程分析

395 阅读1分钟

seata 核心类 GlobalTransactionScanner

1.类图

从类图我们可以看出, GlobalTransactionScanner 主要继承了 AbstractAutoProxyCreator 类,实现了 InitializingBean, ApplicationContextAware, DisposableBean接口。

spring 在加载该类的装载顺序 所做的事情: 1.InitializingBean 接口, 重写了afterPropertiesSet 方法 2.DisposableBean 接口,重写了destroy方法 3. ApplicationContextAware 接口 重写了 setApplicationContext 方法,都是spring的基础知识, 不再叙述, 4.重点看一下AbstractAutoProxyCreator 类的 wrapIfNecessary 方法, 这个方法的核心逻辑就是创建我们TM的核心 -- 全局事务方法拦截器GlobalTransactionalInterceptor,关于全局事务方法拦截器,后续会有文章专门描述

2.初始化客户端

这个类实现了 spring 的 InitializingBean 接口,那我们就可以直接去找 afterPropertiesSet 方法了。 我们可以看到,首先会判断一个参数disableGlobalTransaction , 这个参数取值于配置文件中的service.disableGlobalTransaction , 是禁用全局事务的开关, 默认是false, 不禁用。

接下来是 初始化客户端方法 initClient: 主要干了三个事

1.初始化TM(事务管理器,主要负责定义全局事务边界,创建全局事务,回滚/提交全局事务)

  1. 初始化RM(资源管理区,主要负责管理数据库资源,生成undolog日志)

3.注册优雅停机

关于第三步不再做过多叙述,不是探讨的重点所在, 不再叙述

关于 TM 和RM的初始化,我们单起文档描述 优雅停机和销毁事件,我们单起文档描述