SpringBoot及Nacos配置中心加载顺序及覆盖生效关系

目录

一、测试环境版本

二、测试结果

1、标准的SpringBoot应用

2、含有Nacos配置中心的SpringBoot应用


一、测试环境版本

  • spring-boot-starter-parent  2.7.10

  • spring-cloud-starter-bootstrap  3.1.6

  • spring-cloud-starter-alibaba-nacos-config  2021.0.4.0

  • nacos-client 2.1.1

  • nacos服务端 2.2.1

二、测试结果

1、标准的SpringBoot应用

在标准的SpringBoot应用中,本地配置加载顺序如下:

  • bootstrap配置 加载先于 application配置
  • 不带profile的配置 加载先于 带profile的配置
  • (不含后缀的)同文件名配置 *.yaml  加载先于 *.properties

综上,本地加载顺序为

  1. bootstrap.yaml
  2. bootstrap.properties
  3. bootstrap-{profile}.yaml
  4. bootstrap-{profile}.properties
  5. application.yaml
  6. application.properties
  7. application-{profile}.yaml
  8. application-{profile}.properties

因此,配置生效覆盖关系:

对于key相同的同名配置项,后加载会覆盖掉前加载,故而后加载的配置项会最终生效!

2、含有Nacos配置中心的SpringBoot应用

带Nacos配置中心的SpringBoot应用中,配置加载顺序如下:

  • 本地bootstrap配置 加载先于 本地application配置
  • 本地配置 加载先于 nacos配置中心
  •  nacos配置中心上共享配置(见下说明) 加载先于 nacos配置中心该服务配置(见下说明)
  • 不带profile的配置 加载先于 带profile的配置
  • 本地(不含后缀的)同文件名配置 *.yaml  加载先于 *.properties
  • nacos配置中心因需要通过data ID指定(或者通过spring.cloud.nacos.config.file-extension指定后缀),所以对于Nacos配置中心上的某个Data ID而言,不存在既加载其*.yaml,又加载其*.yaml的情形

综上,本地及Nacos配置中心共同加载顺序为

  1. bootstrap.yaml
  2. bootstrap.properties
  3. bootstrap-{profile}.yaml
  4. bootstrap-{profile}.properties
  5. application.yaml
  6. application.properties
  7. application-{profile}.yaml
  8. application-{profile}.properties
  9. nacos配置中心共享配置(通过spring.cloud.nacos.config.shared-configs指定)
  10. Nacos配置中心该服务配置(通过spring.cloud.nacos.config.prefix和spring.cloud.nacos.config.file-extension指定)
  11. Nacos配置中心该服务-{profile}配置(通过spring.cloud.nacos.config.prefix和spring.cloud.nacos.config.file-extension、以及spring.profiles.active指定)

因此,配置生效覆盖关系:

对于key相同的同名配置项,后加载会覆盖掉前加载,故而后加载的配置项会最终生效!

猜你喜欢

转载自blog.csdn.net/zyplanke/article/details/131101840