如何在springboot应用程序yaml中注入部署yaml env变量

uelo1irk  于 2023-03-16  发布在  Spring
关注(0)|答案(2)|浏览(320)

我正在尝试将Kubernetes的部署yaml中声明的环境变量读入springboot application.yaml
下面是deployment.yaml中的示例

spec:
      containers:
        env:
        - name: SECRET_IN
          value: dev

下面是应用程序.yaml中的示例

innovation:
      in: ${SECRET_IN:demo}

但是在本地主机上,当我尝试打印innovation.in(正确创建@Configuration)时,我在输出中没有得到“dev”,它总是打印 demo,它显示部署之间的链接,应用程序yaml没有发生,有人能帮忙吗?

pcww981p

pcww981p1#

您可以将整个application.YAML配置文件存储到config mapsecret中,并仅将其与部署一起注入
例如:

kind: ConfigMap
apiVersion: v1
metadata:
  name: demo
data:
  application.yaml: |-
    pool:
      size:
        core: 1
        max:16

如果您application.properties类似于
示例:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/dbname
spring.datasource.username=user
spring.datasource.password=password

您可以将其替换为

jdbc:mysql://${MYSQL_HOST:localhost}:3306/dbname

Deployment.yaml将类似于

spec:
      containers:
      - name: demowebapp
        image: registry.gitlab.com/unicorn/unicornapp:1.0
        ports:
        - containerPort: 8080
        imagePullPolicy: Always
        env:
          - name: MYSQL_HOST
            value: mysql-prod

您也可以根据需要将更多配置保存到配置Map&secret中。
更多信息请访问:https://pushbuildtestdeploy.com/spring-boot-application.properties-in-kubernetes/

vktxenjb

vktxenjb2#

我认为你做的一切权利,我有一个类似的工作设置,虽然没有默认的'演示'。
从 Spring Boot 的Angular 来看,一些澄清可能会有所帮助。

  1. application.yml可以包含占位符,这些占位符实际上可以从环境变量中解析出来。
    1.确保这个application.yml在spring Boot 应用程序工件的编译过程中没有被“更改”(重写,或者被maven过滤)。
    1.最重要的:spring Boot 对k8s设置一无所知.如果环境变量存在-它会选择它.所以即使在本地也可以检查同样的设置-在本地机器上定义env.变量并运行spring boot应用程序.
    1.可能是因为当应用程序运行时(用户/组)环境变量不可访问--在启动spring Boot 应用程序之前打印环境变量(或者这个特定的变量)来检查它,或者你可以在java的main方法中这样做:
Map<String, String> env  = System.getenv();
env.entrySet().forEach(System.out::println);

相关问题