gpt4 book ai didi

java - 从Spring Boot API(K8s,Docker,Spring,Java)解耦数据库连接字符串

转载 作者:行者123 更新时间:2023-12-02 12:28:10 26 4
gpt4 key购买 nike

问题:我有一个非常简单的spring boot api,带有硬编码的db连接字符串。我想从我的K8s集群中的Pod中提供这些连接字符串,但是告诉api从env变量读取时出现问题。

我的Dockerfile:

FROM gcr.io/distroless/java:8
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

这是db-secret.yaml文件:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
data:
host: XXXX
user: XXXX
password: XXXX
database: XXXX

这是我的api pod我的部署文件的env部分:
          env:
- name: ORIGIN
value: https://myclient.app.com
- name: HOST
valueFrom:
secretKeyRef:
name: db-secret
key: host
- name: PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
- name: USERNAME
valueFrom:
secretKeyRef:
name: db-secret
key: user
- name: DATABASE
valueFrom:
secretKeyRef:
name: db-secret
key: database

这是我的Java application.properties文件:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=${HOST}/"todos"
spring.datasource.username=${USERNAME}
spring.datasource.password=${PASSWORD}

但是...当我尝试使用./mvnw clean package构建应用程序时,我得到:
* java.lang.IllegalStateException:无法加载ApplicationContext
* BeanCreationException:创建名称为'entityManagerFactory'的bean时出错

我尝试通过命令行导出变量,但这没有用。我知道节点具有process.env.SOME_VAR。 Java是否有类似的东西?我已经梳理了一段时间,尝试了不同的解决方案,但目前还没有很多工作。

最佳答案

加载环境变量需要一些配置,否则将找不到任何db-secret.yaml文件。

一种方法是将配置值直接放入application.propertiesapplication.yml中。您可能还需要确保这些文件未提交到存储库中(例如,添加到.gitignore中)。

关于java - 从Spring Boot API(K8s,Docker,Spring,Java)解耦数据库连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61132380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com