SpringBoot配置文件加载优先级

在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低:

  1. 命令行参数: 命令行参数具有最高的优先级。SpringBoot项目被启动时,可以通过命令行传递参数,这些参数将覆盖其他所有配置源中的相同属性。

    java -jar your-application.jar --spring.datasource.url=jdbc:mysql://localhost:3306/mydb
  2. 环境变量: 环境变量的优先级高于配置文件。在操作系统中设置的环境变量可以被Spring Boot应用读取,并用于覆盖配置文件中的属性。

  3. Java系统属性: 通过Java的 -D 参数设置的系统属性也具有较高的优先级,可以覆盖配置文件中的属性。

    java -Dspring.datasource.url=jdbc:mysql://localhost:3306/mydb -jar your-application.jar
  4. 配置文件中的@PropertySource注解 如果在配置类上使用了 @PropertySource 注解指定了额外的配置文件,那么这些文件中的属性将按照注解中指定的顺序被加载,具有较高的优先级。

  5. 配置文件(application.properties 或 application.yml) 位于 src/main/resources 目录下的 application.propertiesapplication.yml 文件中的属性具有中等优先级。如果上述配置源中没有定义某个属性,那么Spring Boot将从这些文件中读取该属性。

  6. 配置类(@ConfigurationProperties使用 @ConfigurationProperties 注解的配置类中的属性具有较低的优先级。如果上述配置源中没有定义某个属性,那么Spring Boot将从这些配置类中读取该属性。

  7. 默认值: 当所有配置源中都没有定义某个属性时,Spring Boot将使用该属性的默认值(如果存在)。

示例

假设这里有一个名为 spring.datasource.url 的配置属性,可以在多个地方定义它:

  • 命令行参数:--spring.datasource.url=jdbc:mysql://localhost:3306/mydb

  • 环境变量:SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb

  • Java系统属性:-Dspring.datasource.url=jdbc:mysql://localhost:3306/mydb

  • @PropertySource 注解指定的配置文件

  • application.propertiesapplication.yml 文件

  • 使用 @ConfigurationProperties 注解的配置类

Spring Boot将按照上述优先级顺序查找这个属性。如果在命令行参数中找到了该属性,那么它将被应用;如果命令行参数中没有定义,那么Spring Boot将继续查找环境变量、系统属性等,直到找到该属性或找不到最终使用默认值。

你可能感兴趣的:(spring,boot,后端,java,优先级)