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

  1. nacos 配置的加载是在 SpringApplication.prepareContext 的时候进行加载的

spring.config.import 加载方式

加载流程如下图所示

从图中可以看出,application.yml 和 nacos 配置的都是在 EnvironmentPostProcessorApplicationListener.
onApplicationEnvironmentPreparedEvent 接收到 ApplicationEnvironmentPreparedEventEvent 事件后加载的

结论:

1.spring.config.import 方式加载 application.yml 和 nacos 配置都是在 ApplicationEnvironmentPreparedEventEvent 期间

  1. 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 中的配置也能输出

相关推荐
萧曵 丶13 分钟前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步
伍哥的传说27 分钟前
鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)
前端·华为·前端框架·harmonyos·鸿蒙
yugi98783828 分钟前
前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
前端
浪裡遊40 分钟前
Sass详解:功能特性、常用方法与最佳实践
开发语言·前端·javascript·css·vue.js·rust·sass
旧曲重听11 小时前
最快实现的前端灰度方案
前端·程序人生·状态模式
默默coding的程序猿2 小时前
3.前端和后端参数不一致,后端接不到数据的解决方案
java·前端·spring·ssm·springboot·idea·springcloud
夏梦春蝉2 小时前
ES6从入门到精通:常用知识点
前端·javascript·es6
归于尽2 小时前
useEffect玩转React Hooks生命周期
前端·react.js
G等你下课2 小时前
React useEffect 详解与运用
前端·react.js
我想说一句2 小时前
当饼干遇上代码:一场HTTP与Cookie的奇幻漂流 🍪🌊
前端·javascript