概述
介绍
在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
最后
以上就是留胡子早晨为你收集整理的seata源码解析:seata和spring是如何整合的?的全部内容,希望文章能够帮你解决seata源码解析:seata和spring是如何整合的?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复