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
相关产品推荐
相关产品推荐

