sc 的 bootstrap context 是 main application context 的 parent,需要在 main application context 中使用的 bean 可以在
spring-cloud-alibaba-nacos-config/META-INF/spring.factories 文件中定义:
org.springframework.cloud.bootstrap.BootstrapConfiguration= org.springframework.cloud.alibaba.nacos.NacosConfigBootstrapConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration= org.springframework.cloud.alibaba.nacos.NacosConfigAutoConfiguration, org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpointAutoConfiguration org.springframework.boot.diagnostics.FailureAnalyzer= org.springframework.cloud.alibaba.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
BootstrapConfiguration 对应 sc 的 bootstrap context。
EnableAutoConfiguration 是 spring boot 的自动配置注解。
spring.factories 文件的解析在 SpringFactoriesLoader 类中。
NacosConfigBootstrapConfiguration
@Configuration // 创建 bean @ConditionalOnProperty(name = "spring.cloud.nacos.config.enabled", matchIfMissing = true) public class NacosConfigBootstrapConfiguration { @Bean // 创建 bean @ConditionalOnMissingBean public NacosConfigProperties nacosConfigProperties() { return new NacosConfigProperties(); } @Bean public NacosPropertySourceLocator nacosPropertySourceLocator( NacosConfigProperties nacosConfigProperties) { return new NacosPropertySourceLocator(nacosConfigProperties); } }
spring boot 实体类装载配置文件信息
@ConfigurationProperties(NacosConfigProperties.PREFIX) public class NacosConfigProperties { public static final String PREFIX = "spring.cloud.nacos.config"; private static final Logger log = LoggerFactory .getLogger(NacosConfigProperties.class); /** * nacos config server address */ private String serverAddr; }