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

Spring Boot中@ConfigurationProperties无法读取application.properties配置值的原因及解决方法

为什么你的Spring Boot配置类读不到application.properties的值?

看起来你遇到了配置绑定的典型问题,咱们一步步拆解原因和修复方法:

问题根源

1. 配置键与类属性的绑定不匹配

Spring Boot的@ConfigurationProperties遵循驼峰属性 ↔ 短横线/点分隔配置键的映射规则,但你的配置和类属性完全对不上:

  • 你的配置类prefix是dolphin.redis,属性是userSubArticleKey,对应的正确配置键应该是dolphin.redis.user-sub-article-key(短横线分隔)或者dolphin.redis.userSubArticleKey(驼峰形式)。
  • 但你现在的配置是dolphin.redis.user.sub.article.key,这是一个四层嵌套的结构(user → sub → article → key),和你配置类里的单层属性userSubArticleKey没有任何绑定关系,Spring自然无法把值注入进去。

2. 注解使用错误

  • @ConfigurationPropertiesScan是用来扫描@ConfigurationProperties类的,它应该加在启动类上,而不是配置类本身。
  • 你的注解组合有点冗余:如果启动类已经加了@EnableConfigurationProperties(CruiseRedisKeysConfig.class),配置类上的@Component可以去掉;或者如果启动类加了@ConfigurationPropertiesScan,那@EnableConfigurationProperties和@Component都可以省略,Spring会自动处理。

修复方案(两种选其一就行)

方案一:修改配置文件,适配现有配置类

保持配置类不变,把application.properties里的配置键改成短横线分隔形式:

dolphin.redis.user-sub-article-key=cruise:user:sub:article:

然后调整注解:

  • 配置类移除@ConfigurationPropertiesScan:
package com.dolphin.soa.post.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "dolphin.redis")
public class CruiseRedisKeysConfig {
    private String userSubArticleKey;
}
  • 启动类可以去掉@EnableConfigurationProperties(因为@Component已经把配置类注册成Bean了):
public class AppStarter {}

方案二:修改配置类结构,适配现有多层级配置

如果想保留dolphin.redis.user.sub.article.key这个配置键,就得把配置类改成嵌套结构来匹配层级:

package com.dolphin.soa.post.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "dolphin.redis")
public class CruiseRedisKeysConfig {
    private User user;

    @Data
    public static class User {
        private Sub sub;

        @Data
        public static class Sub {
            private Article article;

            @Data
            public static class Article {
                private String key;
            }
        }
    }
}

之后获取值的时候要通过层级调用:cruiseRedisKeysConfig.getUser().getSub().getArticle().getKey()。同时记得把@ConfigurationPropertiesScan移到启动类:

@ConfigurationPropertiesScan
public class AppStarter {}

额外小提示

  • 确认application.properties在src/main/resources目录下,这是Spring Boot默认加载配置的位置。
  • 如果你的配置类不在启动类的同包或子包下,记得在@ConfigurationPropertiesScan里指定包路径,比如@ConfigurationPropertiesScan(basePackages = "com.dolphin.soa.post.common.config")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:57:53