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

在Spring Boot中从ConfigMap读取Map<String, Integer>的更优方案

解决方案

核心优化方向:让ConfigMap生成Spring Boot可直接解析的嵌套配置结构,省去手动字符串转Map的步骤


1. 修正Helm ConfigMap模板写法

不要将嵌套Map转为YAML字符串存储,而是直接生成Spring能识别的扁平化键值对,或者正确渲染嵌套结构:

写法一:生成扁平化配置(推荐)

直接遍历Values中的Map,生成对应层级的键值对,Spring可自动映射为Map类型:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
data:
  key1: 'true'
  key2: {{ printf "https://%s.%s" .Values.env.xxx .Values.env.abc }}
  key3: "2020-10-08T00:00:00.0+00:00"
  # 遍历Values中的嵌套Map,生成Spring可识别的配置键
  {{- range $key, $value := .Values.journey.event.range }}
  journey.event.range.{{ $key }}: {{ $value | quote }}
  {{- end }}
写法二:直接渲染完整YAML结构

如果需要保留Map的整体结构,可将整个Map转为YAML并存储为单个配置项,但需确保Spring能解析:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
data:
  key1: 'true'
  key2: {{ printf "https://%s.%s" .Values.env.xxx .Values.env.abc }}
  key3: "2020-10-08T00:00:00.0+00:00"
  # 正确渲染整个嵌套Map为YAML格式,注意缩进
  journey.event.range: |
    {{ .Values.journey.event.range | toYaml | nindent 4 }}

2. Spring Boot端简化读取

对应写法一,直接通过@ConfigurationProperties自动映射为Map:

@Configuration
@ConfigurationProperties(prefix = "journey.event.range")
public class JourneyConfig {
    private Map<String, Integer> range;

    // 生成getter/setter方法
}

对应写法二,若使用完整YAML字符串,可结合Spring的YAML解析工具,但写法一无需额外转换逻辑,更简洁。

3. 关键注意点

  • 检查Helm模板中的Values路径是否正确:你之前的模板里存在patientjourney、timelinerange、erange等笔误,需和values.yaml中的journey.event.range严格对应
  • ConfigMap生成的键名要匹配Spring配置前缀的大小写规则(Spring默认忽略大小写,但建议保持一致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:13:12