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

如何将SpringBoot的application.properties关联至Kubernetes ConfigMaps与Secrets

一、application.properties 占位符配置

直接用Spring Boot的环境变量占位符语法,把原来硬编码的数据库配置替换成${变量名}:

# 数据库配置
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

如果担心变量缺失导致启动失败,也可以加默认值(生产环境不推荐):

spring.datasource.url=${DB_URL:jdbc:mysql://localhost:3306/default_db}
二、创建Kubernetes ConfigMap 和 Secret

1. ConfigMap(存储非敏感配置)

创建db-config ConfigMap,存放数据库URL和用户名:

# db-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: db-config
data:
  DB_URL: "jdbc:mysql://mysql-service:3306/mydb?useSSL=false&serverTimezone=UTC"
  DB_USERNAME: "db_user"

执行命令创建:kubectl apply -f db-config.yaml

2. Secret(存储敏感配置)

创建db-secret Secret,存放数据库密码(注意:Secret的data字段值必须是Base64编码):

# db-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  DB_PASSWORD: bXlwYXNzd29yZA==  # 示例:echo -n "mypassword" | base64 得到的编码值

执行命令创建:kubectl apply -f db-secret.yaml

三、在Deployment中关联配置

仅在Deployment里定义依赖不够,必须明确将ConfigMap/Secret的内容注入为Pod的环境变量(或挂载为文件),Spring Boot才能读取到。下面是环境变量注入的示例:

# spring-boot-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spring-boot-app
  template:
    metadata:
      labels:
        app: spring-boot-app
    spec:
      containers:
      - name: spring-boot-app
        image: your-spring-boot-image:latest
        env:
          # 从ConfigMap注入环境变量
          - name: DB_URL
            valueFrom:
              configMapKeyRef:
                name: db-config
                key: DB_URL
          - name: DB_USERNAME
            valueFrom:
              configMapKeyRef:
                name: db-config
                key: DB_USERNAME
          # 从Secret注入环境变量
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: db-secret
                key: DB_PASSWORD
        ports:
        - containerPort: 8080

执行命令部署:kubectl apply -f spring-boot-deployment.yaml

四、额外注意事项
  • Spring Boot会自动读取Pod的环境变量,填充application.properties中的占位符,无需额外配置。
  • 如果选择将ConfigMap/Secret挂载为文件(比如挂载到/config目录),可以在application.properties中添加spring.config.import=optional:file:/config/,Spring Boot会自动加载该目录下的配置文件。
  • Secret的权限要严格控制,避免无关Pod或用户访问。可以通过RBAC限制Secret的访问权限。
  • 生产环境建议关闭Spring Boot的占位符默认值,确保配置必须存在,避免使用默认值导致的连接错误。

内容的提问来源于stack exchange,提问作者Mayank Singh Rathore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:40:16