携程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配置中心
SpringCloud - Spring Cloud 之 Apollo Config携程阿波罗配置中心(二十一)
携程apollo源码在idea中启动报错TransportException: Cannot execute request on any known server