2025年Java面试宝典最新版,点击领取
(网盘链接长期有效,建议保存到自己账号)
Spring Boot Configuration 加载顺序深度解析
最近面试中经常被问到Spring Boot配置加载顺序的问题,尤其是一些大厂喜欢结合实际场景考察候选人对优先级逻辑的理解。今天我们就用大白话拆解这个知识点,帮你彻底搞懂不同配置源的加载规则。
核心原则:越外部的配置优先级越高
Spring Boot设计的配置加载顺序遵循一个基本原则——离应用越近的配置优先级越高。比如命令行参数比打包在JAR内的配置文件优先级高,这符合容器化部署时动态调整配置的需求。

配置源加载优先级详解(从高到低)
-
命令行参数
启动时通过--key=value传递的参数绝对优先。比如用java -jar app.jar --server.port=8081启动时,会覆盖所有其他端口配置。 -
SPRING_APPLICATION_JSON
通过系统环境变量或JVM参数设置JSON格式的配置,适合在容器环境批量注入配置。 -
JVM系统属性
通过-D设置的参数,比如-Dspring.profiles.active=dev激活开发环境配置。 -
操作系统环境变量
直接在服务器环境配置的参数,比如在Linux中通过export DATABASE_URL=xxx设置数据库连接。 -
外部配置文件
包含两类特殊位置:- 当前目录下的
/config子目录 - 当前目录的根目录
- 这些位置的
application.properties或application.yml会覆盖JAR包内部配置
- 当前目录下的
-
内部配置文件
打包在JAR包内部的application-{profile}.properties文件,通常作为默认配置模板存在。 -
@PropertySource注解
通过代码显式指定的配置源,适合模块化加载特定配置,但要注意注解要加在@Configuration类上才有效。 -
默认属性
Spring Boot内置的默认配置,比如默认的Tomcat端口就是8080。
高频面试问题破解思路
当面试官问"如何保证生产环境的数据库密码不被泄露到代码仓库",可以这样答:
- 利用配置优先级特性,把敏感信息放在外部配置文件
- 通过服务器环境变量注入(优先级高于jar包内配置)
- 绝对不要将生产配置提交到Git仓库
- 结合Spring Cloud Config做集中式加密配置管理

Profile机制的特殊处理
当使用spring.profiles.active激活特定环境配置时,加载顺序需要特别注意:
application-{profile}.properties会覆盖默认的application.properties- Profile专属配置按外部优先原则加载
- 多个Profile存在时,后面的配置会覆盖前面的
需要购买Spring Boot面试题库的同学,可以通过面试鸭返利网联系我,使用返利码可立减25元会员费,实测有效!
避坑指南
- 避免在多个配置源重复定义同一个key
- 慎用
@PropertySource加载远程配置,可能影响启动速度 - 测试环境务必验证配置覆盖是否符合预期
- 使用
spring.config.location指定外部配置路径时,注意会完全替换默认搜索路径

建议把本文提到的配置优先级打印成表格随身携带,面试前快速温习。想要系统掌握Spring Boot面试考点的小伙伴,可以下载我们整理的2025年Java面试宝典,里面包含20+大厂真题解析。


