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加載環境變量
