Java面试题更新 2026-08-05

请说明在 Spring Boot 中,不同位置的配置文件在加载时的先后顺序是怎样的?

后端开发技术原理JavaSpring Boot

考察说明

考查候选人对 Spring Boot 配置加载顺序的掌握程度,以及能否清晰说明多个配置源之间的覆盖关系。

回答思路

  1. 【回答框架 1】Spring Boot 的配置加载遵循一个固定的优先级顺序,位置靠前的配置会覆盖位置靠后的配置。默认情况下,命令行参数优先级最高,其次是 Java 系统属性、操作系统环境变量,然后是 application.properties 或 application.yml 文件。
  2. 【回答框架 2】对于配置文件,Spring Boot 会按以下顺序查找:先找 jar 包外的 config 子目录,再找 jar 包外的根目录,然后是 jar 包内的 config 目录,最后是 jar 包内的根目录。后找到的配置会覆盖先找到的相同属性。
  3. 【回答框架 3】除了位置顺序,配置文件还有 profile 相关的顺序。application-{profile}.properties 或 application-{profile}.yml 的优先级高于不带 profile 的 application.properties 或 application.yml,并且 profile 越靠后激活,其配置优先级越高。
  4. 【回答框架 4】在同一个配置文件中,properties 和 yml 的加载顺序没有明确区分,但如果同时存在,通常 properties 优先。此外,Spring Boot 还允许通过 spring.config.name 和 spring.config.location 来自定义配置文件名称和路径,这会改变默认的加载顺序。
  5. 【关键点 1】命令行参数 > Java 系统属性 > 操作系统环境变量 > 配置文件(外部 config 子目录 > 外部根目录 > 内部 config 子目录 > 内部根目录)。
  6. 【关键点 2】带 profile 的配置文件(application-{profile})优先级高于不带 profile 的,且 profile 激活顺序靠后的优先级高。
  7. 【关键点 3】相同属性名时,高优先级源的配置会覆盖低优先级源的配置。
  8. 【关键点 4】可以通过 spring.config.name 和 spring.config.location 自定义配置文件名和搜索路径。
  9. 【易错点 1】不要混淆配置文件的物理位置顺序和 profile 顺序,两者是独立的维度。
  10. 【易错点 2】不要认为 application.yml 总是比 application.properties 优先,实际加载顺序并不保证,通常 properties 优先但依赖具体环境。
  11. 【易错点 3】注意命令行参数和系统属性的优先级高于配置文件,但环境变量优先级低于系统属性。