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

SpringBoot应用在OpenShift平台读取Kubernetes ConfigMap配置失败求助

问题根因

你遇到的报错本质是Spring Boot没有加载到ConfigMap挂载的配置文件,核心有两点原因:

  1. /etc/config 不在Spring Boot的默认配置文件搜索路径中,Spring Boot默认仅会扫描以下路径的配置文件(优先级从高到低):当前工作目录下的/config子目录、当前工作目录、classpath下的/config包、classpath根路径。
  2. 你挂载的配置文件名为myapplication.properties,不符合Spring Boot默认识别的配置文件命名规则(默认只识别application.properties/application.yml或带环境标识的application-{profile}.properties这类命名),就算路径正确也不会默认加载。
解决方案

你可以选择任意一种符合你需求的方案修复:

  • 方案一:新增配置搜索路径+适配默认命名(推荐)
    该方案不会覆盖原有默认配置加载逻辑,仅新增ConfigMap配置的加载优先级:
    1. 重建ConfigMap,将内部的配置文件名调整为Spring Boot默认识别的application.properties:
      执行命令:oc delete configmap myconfig && oc create configmap myconfig --from-file=application.properties=myapplication.properties
    2. 在Deployment的容器配置中新增环境变量,指定额外的配置搜索路径:
      spec:
        containers:
        - # 原有容器配置保留,新增以下env字段
          env:
          - name: SPRING_CONFIG_ADDITIONAL_LOCATION
            value: "file:/etc/config/"
          volumeMounts:
          - name: application-config 
            mountPath: "/etc/config" 
            readOnly: true
      volumes:
      - name: application-config
        configMap:
          name: myconfig
      
  • 方案二:直接指定自定义配置文件路径
    如果你不想修改配置文件的命名,可以直接指定Spring Boot加载目标配置文件:
    在Deployment的容器配置中新增环境变量:
    env:
    - name: SPRING_CONFIG_LOCATION
      value: "classpath:/,file:/etc/config/myapplication.properties"
    
    注意SPRING_CONFIG_LOCATION会完全覆盖默认的配置搜索路径,上述配置中classpath:/用于保留原有项目内置配置的加载能力,避免原有配置失效。

额外排查点:你提供的ConfigMap输出中greeter.message的值出现了两次on Kubernetes!的重复内容,确认是你粘贴时的格式问题还是ConfigMap创建时就存在内容错误,避免配置加载成功后取值不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:12:01