( 七 ) SpringBoot 配置的加载

( 七 ) SpringBoot 配置的加载 

 

 

1、简介

     通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties 或 apllication.yml 作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties 或 application.yml。

Spring Boot 项目中可以存在 多个 application.properties 或 apllication.yml

 

2、默认扫描配置的加载顺序

以下是常用的 Spring Boot 配置形式及其加载顺序(优先级由高到低):

  1. 命令行参数
  2. 来自 java:comp/env 的 JNDI 属性
  3. Java 系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource 配置的 random.* 属性值
  6. 配置文件(YAML 文件、Properties 文件)
  7. @Configuration 注解类上的 @PropertySource 指定的配置文件
  8. 通过 SpringApplication.setDefaultProperties 指定的默认属性

如果项目中存在多个properties 或者 yml 配置文件, 加载顺序如下(优先级从高到低):

  1. 先加载 JAR 包外的配置文件,再加载 JAR 包内的配置文件;
  2. 先加载 config 目录内的配置文件,再加载 config 目录外的配置文件;
  3. 先加载 config 子目录下的配置文件,再加载 config 目录下的配置文件;
  4. 先加载 项目根目录的, 再加载 resource 目录下的配置文件。
  5. 先加载 appliction-{profile}.properties/yml,再加载 application.properties/yml;
  6. 先加载 .properties 文件,再加载 .yml 文件。

以上所有形式的配置都会被加载,当存在相同配置内容时,高优先级的配置会覆盖低优先级的配置;存在不同的配置内容时,高优先级和低优先级的配置内容取并集,共同生效,形成互补配置。

 

 

3、加载其他配置文件

3.1、如果配置文件名字也不叫 application.yml | properties 可以指定外部配置文件的名字:

spring.config.name = app

如果项目已经打成jar包了,则在项目启动时加入如下参数:

java -jar hello-world.jar --spring.config.name=app

在项目启动时,就会按照上面所说的位置按顺序去查找一个名为 app.yaml 的文件

 

3.2、如果配置文件不在SpringBoot  默认的扫描路径下,除了默认配置文件,Spring Boot 还可以加载一些位于项目外部的其他配置文件。我们可以通过如下 2 个参数,指定外部配置文件的路径:

  • spring.config.location 
  • spring.config.additional-location 

spring.config.location

在命令行启动命令中,使用命令行参数 --spring.config.location,指定外部配置文件的路径

java -jar {JAR}  --spring.config.location={外部配置文件全路径}

需要注意的是,使用该参数指定配置文件后,会使项目默认配置文件(application.properties 或 application.yml )失效,Spring Boot 将只加载指定的外部配置文件。

spring.config.additional-location

我们还可以在 Spring Boot 启动时,使用命令行参数 --spring.config.additional-location 来加载外部配置文件。

java -jar {JAR}  --spring.config.additional-location={外部配置文件全路径

但与 --spring.config.location 不同,--spring.config.additional-location 不会使项目默认的配置文件失效,使用该命令行参数添加的外部配置文件会与项目默认的配置文件共同生效,形成互补配置,且其优先级是最高的,比所有默认配置文件的优先级都高。

注意:Maven 对项目进行打包时,位于项目根目录下的配置文件是无法被打包进项目的 JAR 包的,因此位于根目录下的默认配置文件无法在 JAR 中生效,即该项目将只加载指定的外部配置文件和项目类路径(classpath)下的默认配置文件,它们的加载优先级顺序为:

    1. spring.config.additional-location 指定的外部配置文件 my-application.yml
    2. classpath:/config/application.yml
    3. classpath:/application.yml

 

posted @ 2021-08-05 23:11  邓维-java  阅读(1757)  评论(2)    收藏  举报