boot启动 apollo配置项加载 apollo.cluster apollo.meta 源码 环境变量

ConfigurableEnvironment environment = prepareEnvironment(listeners,
applicationArguments);
通过下面的监听加载配置文件
 
 

 

 

 
通过下面的postprocessor加载配置文件信息
 
 

 

 

org.springframework.boot.context.config.ConfigFileApplicationListener#postProcessEnvironment
 
如果不指定Location 就反复循环去找 直到匹配到第一个bootstrap.yml
proprerties-DEV.yml ./proprerties-DEV.yml config/proprerties-DEV.yml
前面都有个classpath
 
 
最后把classpath:/bootstrap.yml放到environment
 
 

 

 

context = createApplicationContext(); //创建包含环境变量上下文
 
org.springframework.boot.SpringApplication#prepareContext
applyInitializers(context); 各种初始化器加载包括apollo 、bootstrap配置信息
 

 

 

com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer#initializeSystemPropertyapollo中加载的四个主要key
 

 

 

 
 
从上下文中获得appollo keyvalue 放到\
composite = CompositePropertySource {name='ApolloBootstrapPropertySources', propertySources=[]}
composite.addPropertySource(configPropertySourceFactory.getConfigPropertySource(namespace, config));
即加入到environment的sourceproperties中
并且位于第一位(很多是系统重要配置信息)
 

 

 

 
CompositePropertySource  是自定义配置信息的封装 传给spring 来为Environment
 
 
 
 
如果通过指定执行不同的环境和集群
1最直接的方式 指定apollo.meta 指定domain
apollo.cluster 或者apollo.ics 先后 指定集群
 
2通过环境变量指定env = cluster =

 

 

 
会根据你指定的dev 来加载地址
 
两个provider 第一个是有限加载系统里apollo.meta
如果apollo.meta没写 则加载apollo-env里面的 按照你指定的env来加载 如果写了 你环境变量指定的再多也没用
 
 

 

 

 

 

 
 
指定执行集群
如下代码 1从环境变量中。要么写到apollo.cluster中放到环境变量 vm中
-Denv=DEV -Dapollo.cluster=REV
或者写ics加载环境变量

 

 

posted @ 2020-10-11 23:36  saveworld_niub  阅读(2963)  评论(1编辑  收藏  举报