本文介绍
spring cloud 作为主流的微服务分布式组件,本身已经提供了配置中心spring cloud config组件。国内阿里巴巴基于spring cloud体系实现了一套spring cloud alibaba的生态架构。
spring cloud alibaba nacos config的使用在这里不进行介绍,这里记录一下spring cloud alibaba nacos config的配置属性加载原理。
疑问?
在nacos客户端创建配置文件之后,那么疑问就来了,nacos客户端创建的配置属性是什么时候加载到环境变量中的呢?以及是怎样加载到环境变量中呢?
解答
NacosConfigBootstrapConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration
org.springframework.boot.diagnostics.FailureAnalyzer=\
com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
BootstrapConfiguration注解的作用是加载bootstrap application context,内部是一个数组类型,所有的配置都需要通过该注解进行引导
/**
* A marker interface used as a key in <code>META-INF/spring.factories</code>. Entries in
* the factories file are used to create the bootstrap application context.
*
* @author Dave Syer
*
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BootstrapConfiguration {
/**
* Excludes specific auto-configuration classes such that they will never be applied.
*/
Class<?>[] exclude() default {};
}
对于spring cloud nacos config而言,这里引导的配置类就是NacosConfigBootstrapConfiguration.class
@Configuration
@ConditionalOnProperty(name = "spring.cloud.nacos.config.enabled", matchIfMissing = true)
public class NacosConfigBootstrapConfiguration {
@Bean
@ConditionalOnMissingBean
public NacosConfigProperties nacosConfigProperties() {
return new NacosConfigProperties();
}
@Bean
public NacosPropertySourceLocator nacosPropertySourceLocator(
NacosConfigProperties nacosConfigProperties) {
return new NacosPropertySourceLocator(nacosConfigProperties);
}
}
在这个类里面会创建一个NacosPropertySourceLocator类,加载到spring容器里面。接下来就看NacosPropertySourceLocator.class这个类里面的内容。