问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SpringBoot配置文件加载优先级详解

创作时间:
作者:
@小白创作中心

SpringBoot配置文件加载优先级详解

引用
CSDN
1.
https://blog.csdn.net/qq_41684621/article/details/146177140

在SpringBoot应用中,配置文件的加载顺序(优先级)决定了不同来源的配置属性如何覆盖彼此。本文将详细分析SpringBoot配置文件加载的优先级,帮助开发者更好地组织和管理配置文件。

配置来源优先级

  1. 通过命令行(Command-line arguments)传递的参数具有最高优先级。

    例如,在启动应用时传递命令行参数--server.port=8081

    java -jar myapp.jar --server.port=8081
    
  2. Java系统属性

    在启动应用时通过-D选项设置的系统属性。

    例如,在启动应用时设置-Dserver.port=8081系统属性:

    java -Dserver.port=8081 -jar myapp.jar
    
  3. 操作系统环境变量

    设置在操作系统级别的环境变量。例如,SERVER_PORT=8081

  4. random配置属性源(Random Configuration Property Sources)

    包括random.*属性,用于生成随机数或其他随机相关的配置。

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

    基于当前激活的Spring Profile加载的配置文件。例如,如果激活了dev环境,则加载application-dev.properties

  6. application.properties或application.yml文件

    默认的配置文件,通常位于src/main/resources目录下。

  7. @PropertySource注解指定的属性文件

    通过在配置类上使用@PropertySource注解加载的自定义属性文件。

  8. 默认属性

    使用SpringApplication.setDefaultProperties设定的默认属性。

配置文件的搜索顺序

Spring Boot在不同位置搜索application.propertiesapplication.yml文件,以下是搜索的顺序,从高到低优先级:

  1. 外部位置(当前目录、上级目录等):
  • file:./config/

  • file:./

  • file:../config/

  • file:../

    如果你在应用程序的当前目录或其上级目录中有配置文件,这些文件的优先级高于类路径下的配置文件。

  1. 类路径下的/config子目录:

  2. 类路径根目录:

配置优先级示例

假设存在以下配置:

  • application-dev.properties在类路径下的config目录中设置server.port=8081
  • 外部application.properties文件设置server.port=8082
  • 命令行参数传递--server.port=8083

在激活devProfile的情况下,最终server.port的值将是8083。这是因为命令行参数的优先级最高,覆盖了其他所有配置来源。

激活Profile

可以通过以下方式激活特定的Spring Profile:

java -jar myapp.jar --spring.profiles.active=dev
  • 环境变量:
    设置SPRING_PROFILES_ACTIVE=dev

  • 配置文件:
    application.properties中设置spring.profiles.active=dev

属性覆盖规则

同一属性名在多个来源中定义时,优先级高的来源会覆盖低的。例如:

  • application.properties中定义app.name=MyApp
  • 外部application.properties中定义app.name=ExternalApp

若外部位置的配置文件优先级更高,则最终app.nameExternalApp

总结

Spring Boot的配置文件加载优先级有助于:

  • 正确组织和管理配置文件,确保不同环境下的配置正确应用。
  • 避免意外覆盖,通过明确的优先级控制哪些配置生效。
  • 优化配置管理流程,尤其是在复杂项目或多环境部署时。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号