前言
使用seata阅嘶,以目前最新的坐標(biāo)版本來看
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2021.1</version>
</dependency>
其內(nèi)部seata相關(guān)的依賴僅為seata-spring-boot-starter龟糕,可知其是整體功能的起始點(diǎn)
以seata目前最新的發(fā)布版本1.4.2來分析下的源碼:GitHub
模塊介紹
分為兩部分:
- seata-server:事務(wù)協(xié)調(diào)器(TC),獨(dú)立進(jìn)程執(zhí)行
- seata-spring:spring體系下相關(guān)使用模塊(此篇講解部分)
配置
模塊對應(yīng)的目錄結(jié)構(gòu)如下
可見spring.factories
- SeataPropertiesAutoConfiguration 初始化默認(rèn)配置參數(shù)
- SeataDataSourceAutoConfiguration 處理datasource(兩個方面:BeanPostProcessor、ProxyCreator)
- SeataAutoConfiguration 全局事務(wù)掃描及設(shè)置
- HttpAutoConfiguration 配置攔截器及異常處理器WebMvcConfigurerAdapter
重點(diǎn)關(guān)注SeataAutoConfiguration
DefaultFailureHandlerImpl 失敗處理
GlobalTransactionScanner 事務(wù)掃描器
掃描
GlobalTransactionScanner繼承自AbstractAutoProxyCreator
AbstractAutoProxyCreator:自動代理生成器辜羊,為符合條件的bean設(shè)置代理
至此含有注解(TwoPhaseBusinessAction蝗肪、GlobalTransactional、GlobalLock)的bean就被設(shè)置了攔截器
攔截器
GlobalTransactionalInterceptor
方法觸發(fā)時攔截對應(yīng)的執(zhí)行信息(GlobalTransactional贰谣、GlobalLock注解情況)娜搂,根據(jù)注解類型不同進(jìn)行不同的邏輯處理
以GlobalTransactional類型為例
采用的是:設(shè)計模式行為型-命令模式
主要任務(wù):對執(zhí)行的方法子事務(wù)進(jìn)行管理
詳見TransactionalTemplate.execute
TccActionInterceptor
同GlobalTransactionalInterceptor觸發(fā)模式
事務(wù)具體的執(zhí)行交由ActionInterceptorHandler進(jìn)行處理