Spring关于配置优先级

[TOC]

bootstrap和application

  • bootstrap 配置文件先于 application 配置文件被加载,会先创建初始化 Bootstrap Context,再创建初始化 Application Context,应用于更早期的配置信息,可以理解为系统配置;
  • bootstrap 和 application 共享同一个 Environment,默认情况下,bootstrap 的配置不会被覆盖,而 application 的配置项可以被覆盖(比如被 application-dev 覆盖,或被 java 命令行覆盖)

spring.config.location和spring.config.additional-location

作用都是读取外部的配置文件

  • spring.config.location使springboot不会再读取jar包内的配置文件(也就是说resource目录下的spring配置文件全部失效)
  • spring.config.additional-location则会进行覆盖互补

spring.config.import

作用是导入配置文件,可以是本地也可以是配置中心的

  • spring.config.import无法重写覆盖属性

Nacos中shared-configs和extension-configs

Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置

  1. 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
  2. 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
  3. 通过内部相关规则(应用名、应用名 + Profile)自动生成相关的 Data Id 配置;
  • 三种配置优先级:主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)
  • 数组元素对应的下标越⼤,优先级越⾼,高优先级配置将覆盖低优先级配置。