IIWAB springboot 配置文件 - IIWAB

springboot 配置文件

IIWAB 12天前 ⋅ 38 阅读

在 Spring Boot 中,配置文件(如 application.propertiesapplication.yml)可以放在多个位置,且存在明确的优先级规则,优先级高的配置会覆盖优先级低的配置。以下是详细说明:

一、配置文件可放置的位置(按优先级从高到低排序)

  1. 命令行参数
    通过 java -jar 启动时指定的参数,例如:

    java -jar app.jar --server.port=8081
    

    优先级最高,会覆盖其他位置的同名配置。

  2. SPRING_APPLICATION_JSON 环境变量
    以 JSON 格式定义的环境变量,例如:

    export SPRING_APPLICATION_JSON='{"server":{"port":8082}}'
    

    优先级次之,常用于容器化环境(如 Docker)。

  3. Servlet 容器相关配置
    如 Tomcat 的 context.xml 等,较少直接使用。

  4. application-{profile}.properties/yml(激活的profile配置)
    带环境标识的配置文件(如 application-dev.properties),优先级高于默认配置,且会与默认配置合并。
    激活方式:通过 spring.profiles.active=dev 指定。

  5. application.properties/yml(默认配置)
    不带环境标识的主配置文件,会被所有环境共享,优先级低于激活的 profile 配置。

  6. 配置文件的物理路径(按优先级从高到低)
    上述第 4、5 类文件可放在以下路径(优先级从高到低):

    • 项目根目录下的 config/ 文件夹(./config/
    • 项目根目录(./
    • 类路径(classpath:)下的 config/ 文件夹(classpath:/config/
    • 类路径根目录(classpath:/,即 src/main/resources/ 目录)

二、配置读取优先级规则

  1. 位置优先级:同一类型的配置文件(如都是 application.properties),放在更高优先级路径(如 ./config/)的会覆盖低优先级路径(如 classpath:/)的配置。
  2. Profile 优先级:激活的 application-{profile} 配置会覆盖默认 application 配置,且两者会合并(非冲突配置共存)。
  3. 命令行/环境变量优先级:命令行参数和 SPRING_APPLICATION_JSON 优先级最高,会覆盖所有配置文件中的同名配置。

示例

假设存在以下配置:

  • classpath:/application.properties 中配置 server.port=8080
  • ./config/application-dev.properties 中配置 server.port=8081
  • 启动命令为 java -jar app.jar --spring.profiles.active=dev --server.port=8082

最终生效的 server.port8082(命令行参数优先级最高)。

总结:Spring Boot 会按优先级从高到低加载所有配置,高优先级配置覆盖低优先级,非冲突配置会合并生效。


全部评论: 0

    我有话说: