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

如何在SpringBoot中配置动态值连接MySQL(适配Kubernetes Secrets)

从Kubernetes Secrets动态加载Spring Boot数据库配置

1. 创建Kubernetes Secret

Kubernetes Secrets会自动用Base64存储敏感数据,你可以用两种方式创建:

方式一:用kubectl直接创建(推荐,自动编码)

直接传入明文,kubectl会自动完成Base64加密:

kubectl create secret generic db-secrets \
  --from-literal=db-username=root \
  --from-literal=db-password=your-real-password \
  --from-literal=db-host=your-mysql-host-address

方式二:手动编写Secret YAML

先把每个值转成Base64编码:

echo -n "root" | base64
echo -n "your-real-password" | base64
echo -n "your-mysql-host-address" | base64

然后创建secret.yaml文件:

apiVersion: v1
kind: Secret
metadata:
  name: db-secrets
type: Opaque
data:
  db-username: <替换为用户名的Base64编码>
  db-password: <替换为密码的Base64编码>
  db-host: <替换为主机地址的Base64编码>

执行命令创建Secret:

kubectl apply -f secret.yaml

2. 修改Spring Boot的application.dev.yaml

把静态配置替换为环境变量占位符,Spring Boot会自动读取容器内的环境变量填充:

datasource:
    url: jdbc:mysql://${DB_HOST}?useSSL=false&allowPublicKeyRetrieval=true
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 在Kubernetes Deployment中映射Secret到环境变量

修改你的Deployment配置,将Secret中的值映射为容器的环境变量:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-springboot-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springboot-app
  template:
    metadata:
      labels:
        app: springboot-app
    spec:
      containers:
      - name: springboot-container
        image: your-app-image:tag
        env:
        - name: DB_HOST
          valueFrom:
            secretKeyRef:
              name: db-secrets
              key: db-host
        - name: DB_USERNAME
          valueFrom:
            secretKeyRef:
              name: db-secrets
              key: db-username
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-secrets
              key: db-password
        ports:
        - containerPort: 8080

备选方案:将Secret挂载为文件读取

如果不想用环境变量,也可以把Secret挂载成文件,让Spring Boot从文件读取值:

修改Deployment添加挂载

spec:
  containers:
  - name: springboot-container
    image: your-app-image:tag
    volumeMounts:
    - name: db-secrets-volume
      mountPath: /secrets/db
      readOnly: true
  volumes:
  - name: db-secrets-volume
    secret:
      secretName: db-secrets

修改application.dev.yaml读取文件内容

datasource:
    url: jdbc:mysql://${file:/secrets/db/db-host}?useSSL=false&allowPublicKeyRetrieval=true
    username: ${file:/secrets/db/db-username}
    password: ${file:/secrets/db/db-password}
    driver-class-name: com.mysql.cj.jdbc.Driver

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:20:26