SpringBoot配置文件加载顺序详解

2025年Java面试宝典网盘地址:
点击下载(提取码:9b3g)
面试中如果被问到SpringBoot配置文件的加载顺序,很多同学会简单回答"application.properties优先级高于application.yml",但这样的答案显然不够专业。今天我们从源码角度解析加载顺序的完整逻辑链,助你在面试中给出高分回答。
一、SpringBoot配置文件加载的核心逻辑
SpringBoot的配置加载顺序可以总结为**"由内到外,由低到高"**的覆盖策略。具体来说,配置文件的加载路径按优先级从低到高依次为:
- 项目根目录下的
/config子目录 - 项目根目录
- classpath下的
/config包 - classpath根目录
这四个位置的配置文件会全部被加载,但高优先级的配置会覆盖低优先级的同名配置。例如,当你在classpath:/config/application.yml和classpath:/application.yml都配置了server.port时,最终生效的是classpath:/config/application.yml中的值。
二、外部化配置的加载顺序
当项目部署到生产环境时,通常需要通过外部配置来覆盖默认值。SpringBoot支持以下外部配置方式(按优先级排序):
- 命令行参数(
--key=value形式) - 操作系统环境变量
- 当前目录下的
/config子目录配置文件 - 当前目录下的配置文件
- classpath中的配置文件

这个顺序在实际部署中尤为重要。比如通过java -jar app.jar --server.port=8081启动应用时,命令行参数会覆盖所有配置文件中的端口设置。
三、Profile配置文件的特殊规则
当存在多个application-{profile}.properties文件时,加载顺序会叠加生效:
- 先加载无profile的通用配置
- 再加载指定profile的配置
- 高优先级位置的profile配置会覆盖低优先级的同名配置
假设在classpath根目录和/config目录都有application-dev.properties,最终生效的是/config目录下的配置。这种设计使得不同环境的配置可以分层管理。
四、配置加载的源码实现
虽然面试时不需要背诵源码,但了解关键类能体现技术深度:
ConfigFileApplicationListener:配置文件加载的入口类PropertySourcesLoader:具体执行配置加载的处理器RandomValuePropertySource:处理random.*类型的配置项
当面试官追问实现原理时,可以这样回答:"SpringBoot启动时会通过ConfigFileApplicationListener扫描约定路径下的配置文件,通过PropertySourcesLoader将这些配置加载到Environment对象中,高优先级的配置会覆盖低优先级的同名配置"。
五、面试应答技巧
被问到配置加载顺序时,建议采用总分结构回答:
- 先说明总体原则:由外到内、由高到低
- 列举具体的加载路径顺序
- 补充profile配置的特殊处理方式
- 适当延伸外部配置的加载方式(命令行参数、环境变量)
如果遇到追问场景题,例如:"如何让测试环境的配置不被生产环境覆盖?",可以回答:"将生产环境配置放在更高优先级的路径,比如使用外部目录的/config子目录存放生产配置,同时通过spring.profiles.active参数激活对应profile"。

特别提示:需要购买面试鸭会员的同学,通过面试鸭返利网找我下单可返现25元,官方正品保障,覆盖90%大厂真题库。
想了解更多面试技巧和真题解析,欢迎访问面试鸭返利网,每日更新大厂最新面经和题库解析,助你轻松斩获offer!


