java 技术随笔

Spring Boot 报错:Could not resolve placeholder 原因与解决办法

启动报 Could not resolve placeholder 'xxx' in value "${xxx}",说明 Spring 在 Environment 中找不到名为 xxx 的属性。它不是代码写错,而是配置没有进入容器。排查如下。

一、常见原因

  1. 属性名拼写错误,或大小写不一致。
  2. 属性所在的配置文件未被加载(多环境 profile 未激活)。
  3. 使用 @PropertySource 引入的自定义配置文件路径写错。
  4. 多模块项目中,属性写在 B 模块的配置里,却到 A 模块去引用。
  5. @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;

加了默认值后,即使属性不存在也不会启动报错。

三、排查顺序

  1. 全局搜索属性名,确认确实存在且拼写一致。
  2. 确认配置文件被加载(检查 profile、@PropertySource)。
  3. 多模块时确认属性在被引用的配置中。
  4. 临时加默认值,验证是“找不到属性”还是“其他异常”。
标签
Spring Boot报错配置