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

Spring中如何动态读取List类型的YAML配置属性

Spring中动态读取YAML数组内指定key配置的方法

在Spring框架中,普通配置属性可以直接通过env.getProperty(key)方法读取。
比如application.yaml写了如下配置:

test: "a"

直接用下面的代码就能拿到值:

val test = env.getProperty("test")

如果YAML是数组结构,比如:

test:
  - 
    a: "a"
  - 
    b: "b"

想要动态读取test数组中key为a对应的配置值,直接写env.getProperty("test[a]")是读不到的。

踩坑核心原因:getProperty("xxx[key]")的访问语法仅适用于xxx本身是Map结构的场景。对于List/数组类型的配置,Spring原生只支持test[0]、test[1]这类按下标索引的访问方式——比如上面的示例里env.getProperty("test[0].a")可以正常读到值"a",但如果不知道目标key对应的元素下标,就没法直接通过属性表达式定位。

要实现无下标的动态读取,直接用通用写法即可:

  • 先把整个数组结构读取为List<Map>类型,再遍历匹配目标key
// 读取整个test数组结构,做防空处理
val testList = env.getProperty("test", List::class.java) as? List<Map<String, Any>> ?: emptyList()
// 遍历找到第一个包含key=a的元素,取出对应值
val aValue = testList.firstNotNullOfOrNull { it["a"] }

如果业务里频繁需要做这类数组内的key匹配,也可以在项目启动时自定义属性后置处理器,提前把这类数组结构扁平化为可直接key访问的Map结构存入Environment,省去每次遍历的成本。普通业务场景下上面的遍历写法实现成本最低,兼容性也最好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:24:15