Spring Boot 加载配置文件的优先级
引言
在Spring Boot中,配置文件是非常重要的一部分,它可以帮助我们配置不同的环境和应用程序的行为。然而,当配置文件很多时,我们需要确保它们的加载顺序和覆盖关系。本文将介绍Spring Boot加载配置文件的优先级,并提供相应的代码示例。
Spring Boot 配置文件的优先级
Spring Boot支持多种配置文件格式,例如.properties
和.yml
。根据配置文件的加载顺序以及配置属性的覆盖规则,我们可以将Spring Boot配置文件的优先级划分为以下几个步骤:
- 默认配置文件:Spring Boot会首先加载默认的配置文件,根据不同的环境加载不同的默认配置文件。默认的配置文件包括
application.properties
和application.yml
。 - 命令行参数:可以通过命令行参数指定配置文件的位置,命令行参数会覆盖默认配置文件中的相同配置属性。
- 系统环境变量:Spring Boot会检查系统环境变量,如果有与配置文件中相同的配置属性,则会覆盖之前的配置。
- 应用程序配置文件:Spring Boot会加载应用程序指定的配置文件,例如
application-dev.properties
或application-prod.yml
。这些配置文件会覆盖默认配置文件中的相同配置属性。 - jar包外部的配置文件:如果在jar包外部存在与配置文件中相同的配置属性,则会覆盖之前的配置。
- jar包内部的配置文件:如果在jar包内部存在与配置文件中相同的配置属性,则会覆盖之前的配置。
下图展示了Spring Boot配置文件的加载顺序和覆盖关系:
erDiagram
config_files ||--|| default_files : has
command_args ||--o default_files : overrides
system_env ||--o command_args : overrides
app_files ||--o system_env : overrides
external_files ||--o app_files : overrides
internal_files ||--o app_files : overrides
操作步骤和示例代码
下面将依次介绍每个步骤的操作和相应的示例代码。
1. 默认配置文件
首先,我们需要在src/main/resources
目录下创建默认的配置文件application.properties
,并添加一些配置属性。例如,我们可以在配置文件中添加一个server.port
属性,指定应用程序的端口号为8080。
# application.properties
server.port=8080
2. 命令行参数
如果我们希望通过命令行参数来指定配置文件的位置,可以使用--spring.config.name
和--spring.config.location
参数。其中,--spring.config.name
用于指定配置文件的名称(不包括扩展名),--spring.config.location
用于指定配置文件的路径。
例如,我们可以通过以下命令行参数来加载名为custom-config.properties
的配置文件:
java -jar myapp.jar --spring.config.name=custom-config --spring.config.location=file:/path/to/config/
3. 系统环境变量
我们还可以使用系统环境变量来配置应用程序的属性。例如,我们可以在系统环境变量中设置一个名为SERVER_PORT
的变量,它的值会覆盖默认配置文件中的server.port
属性。
export SERVER_PORT=8081
4. 应用程序配置文件
如果我们希望根据不同的环境加载不同的配置文件,可以在src/main/resources
目录下创建相应的配置文件。例如,我们可以创建application-dev.properties
和application-prod.yml
,分别用于开发环境和生产环境。
# application-dev.properties
spring.profiles.active=dev
# application-prod.yml
spring:
profiles:
active: prod
5. jar包外部的配置文件
除了在应用程序中指定的默认配置文件外,我们还可以在jar包外部提供另一个配置文件。例如,我们可以在jar包所在的目录下创建一个名为`custom-config.properties