通过Nacos控制台统一配置环境数据,本地项目启动的时候从Nacos远程服务器加载所需要的配置存储到本地。
有两种方式获取
// 1.通过Environment获取配置的key
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
String s1 = context.getEnvironment().getProperty("keyXXXX");
// 2.在JavaBean中通过@Value注解获取指定的key
@Value("${keyXXX}")
String s1;
实际上第二种方式还是Spring的自动装配通过Environment获取指定的key注入到属性中去
实际上第二种方式还是Spring的自动装配通过Environment获取指定的key注入到属性中去。
那么最终问题就是
SpringBoot如何从Nacos远程服务器中查询相关配置加载到本地的Environment?
实际上是通过PropertySourceBootstrapConfiguration来完成从远程读取配置信息的。
PropertySourceBootstrapConfiguration是一个启动配置类,该类中有个initialize方法会调用
PropertySourceLocator.locate(environment)来获取远程配置信息
package org.springframework.cloud.bootstrap.config;
@Configuration
@EnableConfigurationProperties({PropertySourceBootstrapProperties.class})
public class PropertySourceBootstrapConfiguration implements ApplicationContextInitializer<ConfigurableApplicationContext>, Ordered {
// 这个方法initialize 是实现了ApplicationContextInitializer接口
public void initialize(ConfigurableApplicationContext applicationContext) {
CompositePropertySource composite = new CompositePropertySource("bootstrapProperties");
AnnotationAwareOrderComparator.sort(this.propertySourceLocators);
boolean empty = true;
ConfigurableEnvironment environment = applicationContext.getEnvironment();
Iterator var5 = this.propertySourceLocators.iterator();
// 循环调用locator.locate
while(var5.hasNext()) {
PropertySourceLocator locator = (PropertySourceLocator)var5.next();
Propert