面试题:Spring Boot 配置文件加载优先级你知道吗?

是的,Spring Boot 配置文件的加载优先级是一个非常重要的知识点,尤其是在需要覆盖默认配置或根据环境加载不同配置时。Spring Boot 支持多种配置文件格式(如 application.properties 和 application.yml),并且会按照一定的优先级顺序加载这些配置文件。


1. 配置文件格式

Spring Boot 支持以下两种主要的配置文件格式:

  • application.properties:键值对格式。
  • application.yml:YAML 格式。

2. 配置文件的加载顺序

Spring Boot 会按照以下优先级顺序加载配置文件,优先级高的配置会覆盖优先级低的配置

  1. 命令行参数
    • 通过 -- 传递的参数
    • 优先级最高,会覆盖其他所有配置。
  2. SPRING_APPLICATION_JSON 环境变量
    • 通过环境变量传递的 JSON 格式配置
  3. JNDI 属性
    • 从 Java 命名和目录接口(JNDI)中获取的配置。
  4. Java 系统属性(System.getProperties()
    • 通过 -D 参数设置的 Java 系统属性
  5. 操作系统环境变量
    • 操作系统的环境变量,例如:export SERVER_PORT=9090
  6. application-{profile}.properties 或 application-{profile}.yml
    • 针对特定环境的配置文件,例如 application-dev.properties 或 application-prod.yml
    • 需要激活对应的 Profile(通过 spring.profiles.active 配置)。
  7. application.properties 或 application.yml
    • 默认的配置文件,优先级较低。
  8. @Configuration 类上的 @PropertySource 注解
    • 通过 @PropertySource 注解加载的配置文件
  9. 默认属性(通过 SpringApplication.setDefaultProperties 设置)
    • 在代码中设置的默认属性。

3. Profile 的作用

Spring Boot 支持通过 Profile 来区分不同环境的配置。例如:

  • application-dev.properties:开发环境配置。
  • application-prod.properties:生产环境配置。

可以通过以下方式激活 Profile:

  • 命令行参数java -jar myapp.jar --spring.profiles.active=prod
  • 环境变量export SPRING_PROFILES_ACTIVE=prod
  • 配置文件
    在 application.properties 或 application.yml 中指定:spring.profiles.active=prod

4. 配置文件的加载位置

Spring Boot 会从以下位置加载配置文件(优先级从高到低):

  1. 当前目录的 /config 子目录
    • 例如:./config/application.properties
  2. 当前目录
    • 例如:./application.properties
  3. 类路径下的 /config 目录
    • 例如:classpath:/config/application.properties
  4. 类路径根目录
    • 例如:classpath:/application.properties

5. 总结

  • Spring Boot 配置文件的加载优先级从高到低依次为:命令行参数 > 环境变量 > 配置文件 > 默认配置。
  • 通过 Profile 可以实现不同环境的配置隔离。
  • 配置文件可以从多个位置加载,优先级从高到低依次为:当前目录 /config > 当前目录 > 类路径 /config > 类路径根目录。

在面试中,你可以结合实际场景(如多环境配置、配置覆盖等)来展示你对 Spring Boot 配置文件加载机制的理解。

THE END
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容