在标准的 SpringBoot 应用中,本地配置加载顺序如下:
- 本地 bootstrap 配置,先于 application 配置加载。
- 不带 profile 的配置,先于带 profile 的配置加载。
- xxx.yaml 先于 xxx.properties 加载。
- 本地配置先于 nacos 配置中心加载。
- nacos 配置中心上公有配置先于 nacos 配置中心该服务的私有配置(即与微服务名同名的配置文件)加载。
综上,加载顺序为:
- bootstrap.yaml
- bootstrap.properties
- bootstrap-{profile}.yaml
- bootstrap-{profile}.properties
- application.yaml
- application.properties
- application-{profile}.yaml
- application-{profile}.properties
- nacos 配置中心共享配置(通过 spring.cloud.nacos.config.shared-configs 指定)。
- nacos 配置中心该服务配置(通过 spring.cloud.nacos.config.prefix 和spring.cloud.nacos.config.file-extension 指定)。
- nacos 配置中心该服务-{profile} 配置(通过 spring.cloud.nacos.config.prefix 和spring.cloud.nacos.config.file-extension、以及 spring.profiles.active 指定)。
因此,配置生效覆盖关系:
- 对于 key 名相同,后加载会覆盖掉前加载,故而最终为后加载的配置项生效。
- 对于 key 名不同,则直接生效(会加载,但不会被覆盖)。
注意:不能理解为文件级整体覆盖,而仅是同名 key 会被后加载的键值覆盖。