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加载环境变量
