携程Apollo client Spring整合启动过程源码追踪

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了携程Apollo client Spring整合启动过程源码追踪相关的知识,希望对你有一定的参考价值。

参考技术A 0、xml配置命名空间规则

spring xml解析beans时会找到对应spring.handlers 拓展NamespaceHandler
http://www.ctrip.com/schema/apollo=com.ctrip.framework.apollo.spring.config.NamespaceHandler

1、根据xml中的配置,spring解析道apollo命名空间后调用NamespaceHandler 重写的init方法

2、handler 记载命名空间到PropertySourcesProcessor静态变量中,存储的内容就是在阿波罗管理后台定义的 application等命名空间。
3、PropertySourcesProcessor 作为beanfacotry postprocessor postProcessBeanFactory方法被调用。
4、Apollo在Spring ApplicationContext Enviroment PropertySources 存储的key = “ApolloPropertySources”,判断是否初始化过这个内容。
5、创建一个 CompositePropertySource 自定义配置源,名叫“ApolloPropertySources”。

6、遍历命名空间去获取对应的配置,这时候刚启动这些配置是空的,脱离spring new了一个ConfigService 开启管理。

7、DefaultConfigFactory 会开始创建一个namespace对应的config对象

8、获取对应namespace的Config对象时会在LocalFileConfigRepository 中传入一个RemoteConfigRepository

RemoteConfigRepository 创建时会尝试连接Apollo服务端

9、本地文件配置仓库初始化,传入一个远程仓库对象

10、将本地文件配置源自己作为监听器注册到上游(远程)配置仓库对象中

11、至此,environment中的apollo propertysources就设置好了
12、准备好配置定时同步以及加载到environment中存储的对象,接下来就是如何在spring 装配时将配置对象和具体引用的对象关联起来;如下,ApolloAnnotationProcessor来解析,这是一个beanpostprocessor,当bean初始化前后来处理bean。下面用到了反射,直接将bean对应的带有@ApolloConfig("application")的属性设置值为对应命名空间的config配置仓库对象。

12、经过上面的初始化操作,就完成了对象装配,业务上就可以调用获取参数配置,并且由底层仓库对象去更新配置了,业务直接用就行。

以上是关于携程Apollo client Spring整合启动过程源码追踪的主要内容,如果未能解决你的问题,请参考以下文章

Spring BootSpring Boot之整合Apollo配置中心

携程 apollo分布式配置中心学习总结

SpringCloud - Spring Cloud 之 Apollo Config携程阿波罗配置中心(二十一)

携程apollo源码在idea中启动报错TransportException: Cannot execute request on any known server

CentOS 7 搭建基于携程Apollo(阿波罗)配置中心单机模式

携程为何放弃apollo