You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中@ConfigurationProperties(prefix="app-props")配置不生效问题

Spring Boot @ConfigurationProperties绑定空指针问题修复

问题场景

在Spring Boot项目中使用@ConfigurationProperties(prefix="app-props")绑定配置时触发空指针异常,具体代码及报错如下:

配置文件(application.yaml)

app-props:
  uuidMap:
    customerId: "af241470-7a1a-41b9-8861-33c37069b8f2"
    resourceId: "213e8652-bb34-4709-bc4b-a3ad1587f619"

配置类(AppProps.java)

@Component
@ConfigurationProperties(prefix="app-props")
public class AppProps
{
  private Map<String, String> uuidMap;

  public Map<String, String> getUuidMap() {
    return uuidMap;
  }

  public void setUuidMap(Map<String, String> uuidMap) {
    this.uuidMap = uuidMap;
  }
}

业务类(MyClass.java)

@Component
public class MyClass
{
  @Autowired
  private AppProps appProps;

  public void printInfo()
  {
    Map<String, String> uuidMap = appProps.getUuidMap();
    String customerId = uuidMap.get("customerId");
    System.out.println(customerId);
  }
}

启动类(MainEntry.java)

@SpringBootApplication
@EnableConfigurationProperties
public class MainEntry  {
    public static void main(String[] args)
    {
      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainEntry.class);

      MyClass myClass = context.getBean(MyClass.class);
      myClass.printInfo();
      context.close();
    }
}

报错信息

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Map.get(Object)" because "uuidMap" is null at project1.MyClass.printInfo(MyClass.java:18) at project1.MainEntry.main(MainEntry.java:27)

问题排查与修复

1. 核心原因:错误的上下文初始化方式

你使用AnnotationConfigApplicationContext手动初始化Spring上下文,但这个类不会触发Spring Boot的自动配置流程,包括@ConfigurationProperties的属性绑定逻辑。Spring Boot必须通过SpringApplication.run()启动,才能加载完整的自动配置机制。

修复启动类

将启动类的main方法改为标准Spring Boot启动方式:

@SpringBootApplication
@EnableConfigurationProperties
public class MainEntry  {
    public static void main(String[] args)
    {
      ConfigurableApplicationContext context = SpringApplication.run(MainEntry.class, args);

      MyClass myClass = context.getBean(MyClass.class);
      myClass.printInfo();
      context.close();
    }
}

2. 关于IntelliJ警告的说明

Spring Boot Configuration Annotation Processor not configured警告与空指针问题无关,它仅影响IDE的配置属性自动提示功能。解决该警告只需添加注解处理器依赖:

Maven(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

Gradle(build.gradle)

annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

额外检查项

  • 确保application.yaml位于src/main/resources目录下,这是Spring Boot默认的配置文件路径。
  • 确认配置类的setter方法存在且正确(你的代码已满足此要求),@ConfigurationProperties依赖setter注入属性。

内容的提问来源于stack exchange,提问作者leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:15:16