java
技术随笔
Spring Boot 报错:Could not resolve placeholder 原因与解决办法
启动报 Could not resolve placeholder 'xxx' in value "${xxx}",说明 Spring 在 Environment 中找不到名为 xxx 的属性。它不是代码写错,而是配置没有进入容器。排查如下。
一、常见原因
- 属性名拼写错误,或大小写不一致。
- 属性所在的配置文件未被加载(多环境 profile 未激活)。
- 使用 @PropertySource 引入的自定义配置文件路径写错。
- 多模块项目中,属性写在 B 模块的配置里,却到 A 模块去引用。
- @Value 引用了不存在的属性且没有写默认值。
二、解决方案
1. 核对属性名与配置文件
# application.yml app: name: demo
引用时必须完全一致:@Value("${app.name}")。
2. 激活对应的 profile
spring:
profiles:
active: dev
否则 application-dev.yml 中的属性不会加载。
3. 多模块 / 自定义配置引入
@Configuration
@PropertySource("classpath:custom.properties")
public class CustomConfig {}
4. 给占位符加默认值兜底
@Value("${app.name:defaultName}")
private String name;
加了默认值后,即使属性不存在也不会启动报错。
三、排查顺序
- 全局搜索属性名,确认确实存在且拼写一致。
- 确认配置文件被加载(检查 profile、@PropertySource)。
- 多模块时确认属性在被引用的配置中。
- 临时加默认值,验证是“找不到属性”还是“其他异常”。