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

Spring Boot中如何从properties文件注入数组类型配置值

在Spring Boot中注入数组/列表形式配置的方案

针对你这种带索引的嵌套配置,Spring Boot里最优雅的处理方式是用**@ConfigurationProperties**注解来完成配置绑定,下面我给你一步步拆解实现过程:

1. 定义对应的配置实体类

首先要创建和配置结构匹配的实体类,把配置里的层级映射成Java对象:

① 货币对实体类(CurPair)

用来映射market.curpairs[n]下的属性:

public class CurPair {
    private String name;
    private String symbol;
    private Double minamount;

    // 手动生成getter/setter,或者用Lombok的@Data注解一键搞定
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getSymbol() { return symbol; }
    public void setSymbol(String symbol) { this.symbol = symbol; }
    public Double getMinamount() { return minamount; }
    public void setMinamount(Double minamount) { this.minamount = minamount; }
}

② 货币实体类(Curr)

用来映射market.currs[n]下的属性:

public class Curr {
    private String name;
    private String symbol;
    private Double minamount;
    private Double withfee;

    // 同样需要getter/setter,用@Data更省心
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getSymbol() { return symbol; }
    public void setSymbol(String symbol) { this.symbol = symbol; }
    public Double getMinamount() { return minamount; }
    public void setMinamount(Double minamount) { this.minamount = minamount; }
    public Double getWithfee() { return withfee; }
    public void setWithfee(Double withfee) { this.withfee = withfee; }
}

③ 根配置实体类(MarketConfig)

这个类作为顶层绑定,对应配置里的market前缀,包含上面两个列表:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
@ConfigurationProperties(prefix = "market")
public class MarketConfig {
    private List<CurPair> curpairs;
    private List<Curr> currs;

    // 生成getter和setter方法
    public List<CurPair> getCurpairs() { return curpairs; }
    public void setCurpairs(List<CurPair> curpairs) { this.curpairs = curpairs; }
    public List<Curr> getCurrs() { return currs; }
    public void setCurrs(List<Curr> currs) { this.currs = currs; }
}

2. 启用配置属性绑定

如果你的根配置类已经加了@Component,Spring Boot会自动扫描到它,但为了更规范,建议在主启动类上添加@EnableConfigurationProperties注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication
@EnableConfigurationProperties(MarketConfig.class)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

3. 注入并使用配置

现在你可以在任何Spring管理的Bean里(比如Service、Controller)注入MarketConfig,直接使用配置内容了:

import org.springframework.stereotype.Service;
import javax.annotation.Resource;

@Service
public class MarketService {
    @Resource
    private MarketConfig marketConfig;

    public void showMarketConfigs() {
        // 遍历输出所有货币对
        marketConfig.getCurpairs().forEach(pair -> {
            System.out.printf("货币对:%s,符号:%s,最小交易金额:%f%n", 
                pair.getName(), pair.getSymbol(), pair.getMinamount());
        });

        // 遍历输出所有货币配置
        marketConfig.getCurrs().forEach(curr -> {
            System.out.printf("货币:%s,符号:%s,最小金额:%f,提现手续费:%f%n", 
                curr.getName(), curr.getSymbol(), curr.getMinamount(), curr.getWithfee());
        });
    }
}

额外小贴士

  • 如果你的配置是单独的config.properties而非默认的application.properties,需要在application.properties里添加spring.config.import=classpath:config.properties来导入这个配置文件。
  • 推荐用Lombok的@Data注解替代手动编写getter/setter,只需要在项目依赖里加入Lombok即可,能大幅减少样板代码。
  • 配置里的索引[0]、[1]是Spring Boot识别列表的规则,即使索引不连续(比如[0]和[2]),也会被正确映射为List的元素,不用担心顺序问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:12:40