nacos bootstrap.yml 和 spring.config.import 加载配置的流程区别
相关依赖
springboot:2.7.15
nacos:2.2.3
bootstrap.yml加载方式
加载流程如下图所示
从图中可以看出,:
1.bootstrap.yml 的加载是在 BootstrapApplicationListener.onApplicationEvent 接收到 ApplicationEnvironmentPreparedEventEvent 事件后另起一个 SpringApplication 触发的。
2.之后在初始的 SpringApplication 中 通过 EnvironmentPostProcessorApplicationListener.
onApplicationEnvironmentPreparedEvent 接收到 ApplicationEnvironmentPreparedEventEvent 事件加载 application.yml
3. nacos 配置的加载是在 SpringApplication.prepareContext 的时候进行加载的
spring.config.import 加载方式
加载流程如下图所示
从图中可以看出,application.yml 和 nacos 配置的都是在 EnvironmentPostProcessorApplicationListener.
onApplicationEnvironmentPreparedEvent 接收到 ApplicationEnvironmentPreparedEventEvent 事件后加载的
结论:
1.spring.config.import 方式加载 application.yml 和 nacos 配置都是在 ApplicationEnvironmentPreparedEventEvent 期间
2. bootstrap.yml 方式加载 application.yml 和 bootstrap.yml 是在 ApplicationEnvironmentPreparedEventEvent 期间,但是 nacos 配置的加载是在 SpringApplication.prepareContext 期间。
启动期间输出本地yml配置的方式
目前想到的是用于查看 nacos 的 namespace 和 ip,主要是当有多个地方都有配置nacos的时候,可以通过直接输出 ip 和 namespace 识别是否配置正确。
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SimAppExperimentApplication.class);
springApplication.addListeners(new ConfigLog());
springApplication.run(args);
}
public static class ConfigLog implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
Environment environment = event.getEnvironment();
System.out.println("nacos 配置中心ip:"+environment.getProperty("spring.cloud.nacos.config.server-addr"));
System.out.println("nacos 配置中心namespace:"+environment.getProperty("spring.cloud.nacos.config.namespace"));
}
}
基于 bootstrap.yml 的配置方式只能输出本地 bootstrap.yml 和 application.yml 的配置,无法输出naocs 中的配置里的
基于spring.config.import 方式连 nacos 中的配置也能输出
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)