seata源码解析:seata和spring是如何整合的?

请添加图片描述

介绍

在seata低版本中,seata需要用户自己配置数据源代理,并且在resources目录下放2个文件,file.conf和registry.conf。

其中file.conf配置了数据存储模式,registry.conf配置了注册中心的信息

在最新的版本中,seata新增了一个seata-spring-boot-starter模块,让我们可以将数据存储模式和注册中心定义在application.yaml中,并且可以通过Enable注解开始数据源自动代理。

因为我之前的Demo都是基于seata-spring-boot-starter搭建的,所以本节我们就来看一下seata-spring-boot-starter注入了哪些重要的Bean。

按照spring-boot-starter模块的常规套路,直接找spring.factories文件
在这里插入图片描述

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.seata.spring.boot.autoconfigure.SeataPropertiesAutoConfiguration,\
io.seata.spring.boot.autoconfigure.SeataDataSourceAutoConfiguration,\
io.seata.spring.boot.autoconfigure.SeataAutoConfiguration,\
io.seata.spring.boot.autoconfigure.HttpAutoConfiguration

请添加图片描述

SeataPropertiesAutoConfiguration

public class SpringApplicationContextProvider implements ApplicationContextAware, BeanFactoryPostProcessor {
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        ObjectHolder.INSTANCE.setObject(OBJECT_KEY_SPRING_APPLICATION_CONTEXT, applicationContext);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { }
}

而SpringApplicationContextProvider继承了ApplicationContextAware用来获取ApplicationContext,后续就可以从ApplicationContext中获取对象

BeanFactoryPostProcessor接口是用来修改bean的创建方式的,目前方法没有任务实现

SeataDataSourceAutoConfiguration

seata的at和xa模式是基于数据源代理实现的,而SeataDataSourceAutoConfiguration帮助我们对数据源实现了自动代理,不用手动代理。
在这里插入图片描述
各个部分的代理对象的作用以及生效场景如下
请添加图片描述

SeataAutoConfiguration

GlobalTransactionScanner是一个非常重要的类,这个类中会启动RM和TM客户端,并且对加了@GlobalTransactional,@GlobalLock,@TwoPhaseBusinessAction注解的类生成代理对象

FailureHandler是一个失败任务处理类,目前唯一的实现是DefaultFailureHandlerImpl,并没有做任何额外的操作,只是在任务失败时,打印相关的日志。当然你可以重写一下FailureHandler,比如当失败发生时发送邮件或者钉钉

HttpAutoConfiguration

HttpAutoConfiguration这个类主要是用在应用通过http调用时,传递xid。

拦截器TransactionPropagationInterceptor:从请求中名为TX_XID的head中取出xid的值(因为上游在调用的时候会把xid放在head中),并把这个xid放到RootContext中
异常处理器HttpHandlerExceptionResolver:当调用http请求发生异常时,将xid从RootContext中删除

参考博客

[1]https://segmentfault.com/a/1190000039332011
客户端启动
[2]https://www.cnblogs.com/jackion5/p/14788377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值