Spring Boot 全局配置文件优先级

发布于:2025-06-02 ⋅ 阅读:(26) ⋅ 点赞:(0)

好的,Spring Boot的全局配置文件优先级是一个非常重要的概念,它决定了在不同位置的同名配置属性以哪个为准。


Spring Boot 全局配置文件优先级核心知识点 📌

  • 文件格式优先级: 在同一目录下,如果同时存在 application.propertiesapplication.yml 文件,.properties 文件的优先级高于 .yml 文件。这意味着,如果两个文件中定义了相同的属性,将以 .properties 文件中的值为准。

  • 文件位置加载顺序 (由高到低): Spring Boot会从多个位置加载 application.propertiesapplication.yml 文件,优先级顺序如下(列表顶部的优先级最高):

    1. 命令行指定的 spring.config.location: 可以在启动应用时通过命令行参数直接指定配置文件的位置,这个位置的优先级最高。
    2. 项目根目录下的 /config 子目录: 例如,如果你的 JAR 包在 /app/my-app.jar,那么 /app/config/application.properties 的优先级很高。
    3. 项目根目录: JAR 包所在的目录。例如,/app/application.properties
    4. 类路径下的 /config: 项目 src/main/resources/config/ 目录下的配置文件。
    5. 类路径根目录: 项目 src/main/resources/ 目录下的配置文件。这是项目中最常用的位置。
  • Profile特定配置文件的优先级:

    • 无论是哪种位置,特定profile的配置文件 (application-{profile}.properties) 的优先级总是高于不带profile的默认配置文件 (application.properties)。
    • 例如,如果同时激活了 dev profile,并且在 src/main/resources/ 目录下同时存在 application.propertiesapplication-dev.properties,那么 application-dev.properties 中的属性会覆盖 application.properties 中的同名属性。
  • 外部配置的整体优先级 (更广范围): 配置文件只是Spring Boot外部化配置优先级中的一部分。完整的优先级顺序(部分,从高到低)大致如下:

    1. 命令行参数: java -jar my-app.jar --server.port=9090
    2. ServletConfig / ServletContext 初始化参数
    3. JNDI 属性
    4. Java 系统属性 (System.getProperties())
    5. 操作系统环境变量
    6. Profile特定的应用配置文件 (如 application-{profile}.properties)
    7. 普通的应用配置文件 (如 application.properties)
    8. @PropertySource 注解指定的配置文件
    9. 默认属性 (通过 SpringApplication.setDefaultProperties 设置)

核心要点总结:

  • .properties 优先于 .yml (在同一级别)。
  • 外部配置优先于内部配置 (JAR包外部的配置文件优先于内部的)。
  • Profile特定配置优先于通用配置
  • 命令行参数和环境变量可以覆盖所有配置文件中的属性,这使得在不同环境中部署应用变得非常灵活。

网站公告

今日签到

点亮在社区的每一天
去签到