2025年Java面试宝典点这里下载
(网盘链接长期有效,建议保存备用)
简述Spring Boot配置文件加载顺序有哪几种读取配置的方式

在面试中被问到Spring Boot配置相关问题时,咱们得先理清两个核心考点:配置文件的加载顺序和读取配置的方式。这两个知识点是开发中的必备技能,也是大厂面试官特别喜欢深挖的领域。
一、Spring Boot配置文件加载顺序
Spring Boot支持多种配置源,它们的加载顺序直接决定了配置属性的优先级。记住这个口诀准没错:越具体的配置,优先级越高!
-
内置的默认配置
Spring Boot内置了大量默认配置,比如server.port默认是8080。这些配置优先级最低,会被外部配置覆盖。 -
项目内的配置文件
application.properties或application.yml文件放在以下位置会按顺序覆盖:/config子目录(项目根目录下)- 项目根目录
classpath:/config/classpath:/
-
Profile专属配置
比如application-dev.yml会覆盖通用配置,同时支持spring.profiles.active指定激活的配置。 -
操作系统环境变量
通过系统环境变量设置的参数(如export SERVER_PORT=8081)会覆盖文件配置。 -
命令行参数
启动时用java -jar app.jar --server.port=8082传递的参数优先级最高。

二、四种常用读取配置方式
方式1:@Value注解直读法
这是最直接的读取方式,适合获取单个配置项:
@Value("${server.port}")
private String port;
适用场景:简单配置项读取,不适合复杂对象。
方式2:Environment对象动态获取
通过注入Environment对象灵活读取配置:
@Autowired
private Environment env;
public void showConfig() {
String port = env.getProperty("server.port");
}
优势:支持运行时动态获取配置,比如根据条件切换不同配置。
方式3:@ConfigurationProperties批量绑定
这是处理复杂配置的利器,适合将一组配置映射到对象:
custom:
api:
url: https://api.example.com
timeout: 5000
对应Java类:
@ConfigurationProperties(prefix = "custom.api")
public class ApiConfig {
private String url;
private int timeout;
// getters & setters
}
亮点:类型安全、支持数据校验、IDE自动提示。
方式4:@PropertySource加载自定义配置
当需要加载非application前缀的配置文件时:
@Configuration
@PropertySource("classpath:custom.properties")
public class CustomConfig {
@Value("${custom.key}")
private String customKey;
}
注意点:默认不支持yml格式,需要自定义解析器。

三、避坑指南
在配置实战中要注意三个高频踩坑点:
- 多环境配置覆盖问题:确保profile配置与默认配置的继承关系正确
- 配置优先级记混:命令行参数 > 系统环境变量 > Profile配置 > 默认配置
- 类型转换异常:yml中
timeout: 5000是数字,用@Value读取时要用Integer类型
需要购买面试鸭会员的小伙伴,通过面试鸭返利网找我可返25元!现在购买还能免费获取最新整理的《Spring Boot配置陷阱20讲》电子书。
四、面试应答技巧
当面试官问到这个问题时,建议采用总分结构:
- 先总述配置加载顺序(按优先级从高到低)
- 再分述四种读取方式及适用场景
- 最后补充实际开发中的注意事项
建议结合项目经验举例说明,比如:"在我上个月做的微服务项目中,用@ConfigurationProperties统一管理了所有第三方API配置,解决了配置分散的问题..."


