You need to enable JavaScript to run this app. SpringBoot2.5.2如何读取yml中key含下划线的配置值?
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot2.5.2如何读取yml中key含下划线的配置值?

问题根因

Spring Boot 的@ConfigurationProperties注解基于实例对象的Setter方法完成配置值注入,你当前配置类的所有属性都声明为static静态成员,Spring默认不会为静态变量注入配置值,因此无法读取到yml中的对应配置。同时你将数值类型的PREDICT_BATCH_SIZE定义为String类型,类型不匹配也会导致注入失败。

解决方案

方案1(官方推荐):使用非静态属性,通过依赖注入调用

去掉属性的static修饰,为每个属性添加Setter方法,使用时通过依赖注入获取配置类实例后再读取属性:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app.ranking")
public class RankingConfig {
    // 去掉static修饰
    private String UNK;
    private String ARTICLE_FEATURE_GRPC_API;
    private String ARTICLE_STABLE_MODEL_NAME;
    // 类型匹配yml中的数值类型
    private Integer PREDICT_BATCH_SIZE;

    // 为每个属性添加Setter方法(也可以引入Lombok依赖,直接加@Setter注解自动生成)
    public void setUNK(String UNK) {
        this.UNK = UNK;
    }

    public void setARTICLE_FEATURE_GRPC_API(String ARTICLE_FEATURE_GRPC_API) {
        this.ARTICLE_FEATURE_GRPC_API = ARTICLE_FEATURE_GRPC_API;
    }

    public void setARTICLE_STABLE_MODEL_NAME(String ARTICLE_STABLE_MODEL_NAME) {
        this.ARTICLE_STABLE_MODEL_NAME = ARTICLE_STABLE_MODEL_NAME;
    }

    public void setPREDICT_BATCH_SIZE(Integer PREDICT_BATCH_SIZE) {
        this.PREDICT_BATCH_SIZE = PREDICT_BATCH_SIZE;
    }

    // 为每个属性添加Getter方法(也可以用Lombok的@Getter注解自动生成)
    public String getUNK() {
        return UNK;
    }

    public String getARTICLE_FEATURE_GRPC_API() {
        return ARTICLE_FEATURE_GRPC_API;
    }

    public String getARTICLE_STABLE_MODEL_NAME() {
        return ARTICLE_STABLE_MODEL_NAME;
    }

    public Integer getPREDICT_BATCH_SIZE() {
        return PREDICT_BATCH_SIZE;
    }
}

使用时直接注入配置类实例即可:

@Autowired
private RankingConfig rankingConfig;

// 读取配置
String grpcApi = rankingConfig.getARTICLE_FEATURE_GRPC_API();

方案2:保留静态调用方式

如果必须要通过静态方式直接调用属性,可以保留静态属性,同时编写非静态的Setter方法为静态变量赋值:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app.ranking")
public class RankingConfig {
    public static String UNK;
    public static String ARTICLE_FEATURE_GRPC_API;
    public static String ARTICLE_STABLE_MODEL_NAME;
    public static Integer PREDICT_BATCH_SIZE;

    // 非静态Setter方法,Spring会调用实例的Setter为静态变量赋值
    public void setUNK(String UNK) {
        RankingConfig.UNK = UNK;
    }

    public void setARTICLE_FEATURE_GRPC_API(String ARTICLE_FEATURE_GRPC_API) {
        RankingConfig.ARTICLE_FEATURE_GRPC_API = ARTICLE_FEATURE_GRPC_API;
    }

    public void setARTICLE_STABLE_MODEL_NAME(String ARTICLE_STABLE_MODEL_NAME) {
        RankingConfig.ARTICLE_STABLE_MODEL_NAME = ARTICLE_STABLE_MODEL_NAME;
    }

    public void setPREDICT_BATCH_SIZE(Integer PREDICT_BATCH_SIZE) {
        RankingConfig.PREDICT_BATCH_SIZE = PREDICT_BATCH_SIZE;
    }
}

修改后即可直接通过RankingConfig.ARTICLE_FEATURE_GRPC_API读取配置值。

注意事项

如果注入依然不生效,可以在项目启动类上添加@EnableConfigurationProperties(RankingConfig.class)注解,手动开启配置类的绑定功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:57:00