在使用Nacos做配置中心的时候发现,nacos相关的配置如果不写在bootstrap.properties里面是没有效果的。
如是我在NacosConfigProperties的fileExtension属性上打了给断点,我发现当配置写在bootstrap.properties时set方法的断点会先进去,然后再进get方法的,但是当配置写在application.yml文件上时就是相反的。
然后我就去看SpringBoot启动的方法
第一个断点准备环境的方法里面会调用listeners.environmentPrepared((ConfigurableEnvironment)environment);触发一个ApplicationEnvironmentPreparedEvent 事件
而BootstrapApplicationListener监听了这个事件,就会调用到onApplicationEvent方法,这里会创建一个父容器去加载bootstrap相关的类
BootstrapImportSelectorConfiguration 会通过spi导入NacosConfigBootstrapConfiguration从而初始化NacosConfigProperties,但是这时候只会加载bootstrap.properties里面的配置(?),所以nacos的配置写在bootstrap.properties才有作用
this.addAncestorInitializer(application, context); 在后面子容器实例化的时候会设置容器
这里会去设置父容器,然后加载nacos配置文章来源:https://www.toymoban.com/news/detail-526277.html
而子容器加载的方法在this.prepareContext 之后,所以如果nacos配置不在bootstrap.properties里面那么,在获取nacos配置的时候NacosConfigProperties里面就没有值,而是等到子容器加载完了才有值文章来源地址https://www.toymoban.com/news/detail-526277.html
到了这里,关于Nacos做配置中心,配置要写在bootstrap.properties的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!