SpringBoot提供了外部分配置功能,可以使用属性文件(properties)、YAML(yml)文件、环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值。
本章节中,主要解析SpringBoot对属性文件(properties)和YAML(yml)文件的加载顺序和属性优化级
Note: SpringBoot中的配置加载顺序与其属性优先级是相反的,每多时候,我们说的加载顺序,不是属性优先级。超先加载的配置文件则属性优先级越低。
我们需要先带着这种思路来进行下面的阅读。
配置文件目录与属性优化级
1. A /config subdirectory of the current directory.
位于与jar包同级目录下的config文件夹,也就是当前目录下的/config子文件夹下配置
2. The current directory
位于与jar包同级目录下(jar包当前目录)
3. A classpath /config package
classpath下的config目录,如idea环境下,resource文件夹下的config文件夹,编译之后就是classpath下的config文件夹下配置
4. The classpath root
classpath根目录,如idea环境下,resource文件夹下配置
上文所标识的顺序中,表示的是属性的优化先级。也就是说,加载的顺序与其相反,从4开始加载。
如图所示中的序列,表示的是配置文件的加载序顺。加载顺序正好与可放置目录中的序顺相反。
加载1. classpath:/ -- 优先级4. The classpath root
加载2. classpath:/config/ -- 优先级3. A classpath /config package
加载3. file:./ -- 优先级2. The current directory
加载4. file:./config/ -- 优先级1. A /config subdirectory of the current directory.
application与bootstrap
bootstrap优先于application加载, 用于应用程序上下文的引导阶段。由spring cloudBootstrapApplicationListener在ApplicationEnvironmentPreparedEvent时进行加载。
可以将bootstrap配置理解为系统级别的参数配置,这些参数一般不会变更。
application配置可以理解为定义应用级别的参数,可以覆盖替换bootstrap的配置信息。
也就是说application的属性优先较高,加载时先加载bootstrap配置文件,再加载application配置文件。
properties与yml
properties的配置文件属性优先高于yml配置,yml配置文件优先于propertes配置文件加载