专业的编程技术博客社区

网站首页 > 博客文章 正文

详细介绍一下Spring Boot配置文件的加载顺序?

baijin 2025-05-05 14:00:52 博客文章 7 ℃ 0 评论

配置文件,作为Spring Boot中的一个重要的组成部分,其加载顺序决定了不同来源的配置文件如何被合并覆盖使用,在Spring Boot中通过配置文件加载的优先级来决定加载和解析使用那些配置文件箱,不同的配置文件按照来源以及优先级进行加载会覆盖前面的配置文件项。下面我们就来详细介绍一下Spring Boot中配置文件的加载顺序。

命令行参数

命令行参数的配置有限级最高,在Spring Boot加载配置的时候首先会解析通过命令行传递的参数,例如,在启动jar包的时候,通过命令行传递的参数,如下所示。

java -jar myapp.jar --server.port=8081 --spring.profiles.active=prod

这个命令行参数会覆盖其他所有配置文件中关于server.portspring.profiles.active 的配置,所以优先级是最高的。

SPRING_CONFIG_NAME环境变量

如果在环境变量中设置了SPRING_CONFIG_NAME,那么这个配置将会加载指定的配置文件,在默认情况下Spring Boot会加载 application.propertiesapplication.yml。但如果该环境变量被设置了,Spring Boot 会加载指定的文件,如下所示。

export SPRING_CONFIG_NAME=myapp
java -jar myapp.jar

这种情况下,SpringBoot就会尝试加载myapp.propertiesmyapp.yml 配置文件,而不是默认的 application.propertiesapplication.yml

外部配置文件

在Spring Boot中我们还可以通过 --spring.config.location--spring.config.name 参数指定外部配置文件的位置,当然如果没有指定,那么Spring Boot就会默认从classpath:/config/classpath:/ 中查找对应的配置文件,如下所示。

java -jar myapp.jar --spring.config.location=file:/path/to/config/application.properties

这种情况下Spring Boot 会优先加载 /path/to/config/application.properties

默认位置

在默认情况下Spring Boot的配置文件会被放在src/main/resources 目录下,也就是说默认加载的是 application.propertiesapplication.yml 文件,如果在该路径下存在多个配置文件,那么Spring Boot就会按照如下的顺序进行查找。

  • classpath:/config/application.propertiesclasspath:/config/application.yml
  • classpath:/application.propertiesclasspath:/application.yml

这两个位置的配置文件的加载顺序取决于文件在项目中的位置,例如/config/ 路径中的文件会优先于根目录中的文件加载。

application-{profile}.properties或application-{profile}.yml文件

这种配置文件是Spring Boot通过Spring Profiles机制来区分不同环境下需要加载的配置文件,如果指定了活动的 profile,那么Spring Boot就会加载对应的配置文件,这个配置文件的优先级相对来说比较低一点。如下所示。

# application.properties
spring.profiles.active=dev

这种情况下Spring Boot就会默认加载application-dev.propertiesapplication-dev.yml 文件。而这类配置文件的加载顺序也是跟上面提到的默认的配置文件加载顺序类似,如下所示。

classpath:/config/application-dev.properties` 或 `classpath:/config/application-dev.yml
classpath:/application-dev.properties` 或 `classpath:/application-dev.yml

如果没有 dev 配置文件,Spring Boot 会回退到 application.propertiesapplication.yml 文件。当然如果在命令行启动的时候,在命令行环境变量中指定了spring.profiles.active,它会覆盖配置文件中的 spring.profiles.active 设置。

JVM 系统属性

在有些项目中,如果在项目启动的时候通过JVM的系统属性来传递了参数,那么这种情况下这个配置业务覆盖配置文件中的属性,但是这种覆盖要比之前的参数配置覆盖等级要低,如下所示。

java -Dserver.port=8082 -jar myapp.jar

这种情况下,server.port 会被设置为 8082,覆盖掉配置文件中 server.port 的值,但是如果有其他的配置文件再次进行覆盖的话,那么这个值就会被其他的配置文件所覆盖了。

环境变量

之前我们提到了一个SPRING_CONFIG_NAME环境变量,这里我们介绍的是Java的环境变量,这个环境变量的配置也会将配置文件的中配置项的值进行覆盖如下所示。

export SERVER_PORT=8083
java -jar myapp.jar

此时,server.port 会被设置为 8083,覆盖配置文件中的值。

Spring ApplicationContext 默认配置

这种方式是Spring Boot中等级最低的一种配置加载方式,会默认加载一些配置项,但是这些配置项都会被后续的相关配置项所覆盖,例如默认的 server.port 是 8080,默认的数据库连接配置等。

配置加载顺序总结

优先级

配置来源

1

命令行参数(如 java -jar --server.port=8081

2

SPRING_CONFIG_NAME 环境变量

3

外部配置文件--spring.config.location

4


classpath:/config/application.properties

classpath:/config/application.yml

5


classpath:/application.properties

classpath:/application.yml

6

application-{profile}.propertiesapplication-{profile}.yml

7

JVM 系统属性(如 -Dserver.port=8082

8

环境变量(如 export SERVER_PORT=8083

9

默认配置(Spring Boot 内置的默认值)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表