将Kubernetes yaml config中定义的环境值传递给java spring profile

问题描述 投票:2回答:2

我在Dockerfile中有以下内容来运行我的Spring Boot应用程序:

ENTRYPOINT [ "java", "-jar", "/code/myapp/target/myapp.jar", "--spring.profiles.active=$ENV_PROFILE"]

我在我的k8 YAML配置中定义了我的环境变量(ENV_PROFILE):

 spec:
  containers:
    - name: myspringboot
      image: myrepo/myapp:latest
      imagePullPolicy: Always
      resources:
        requests:
          cpu: 100m
          memory: 100Mi
      env:
      - name: ENV_PROFILE
        value: "test"

但是,环境名称不会被注入java springboot应用程序。它在日志中显示为“$ ENV_PROFILE”。我也尝试使用application.properties添加spring.profiles.active=$ENV_PROFILE,但这也无效。

spring spring-boot kubernetes
2个回答
2
投票

您还可以默认覆盖Spring属性(以及应用程序属性中定义的其他属性),而无需指定要在属性文件中传递的环境变量。环境变量的优先级高于属性文件值。

另见Spring Externalized Configuration

例如:

 spec:
  containers:
    - name: myspringboot
      image: myrepo/myapp:latest
      imagePullPolicy: Always
      resources:
        requests:
          cpu: 100m
          memory: 100Mi
      env:
      - name: SPRING_PROFILES_ACTIVE
        value: "test"

3
投票

这是因为您没有在ENTRYPOINT中使用shell。只有shell才能进行环境变量替换。在您的情况下,您可以使用以下ENTRYPOINT:

ENTRYPOINT exec java -jar /code/myapp/target/myapp.jar --spring.profiles.active=$ENV_PROFILE

这种语法涉及调用“/ bin / sh -c ENTRYPOINT”和“exec”确保java将成为容器内的PID 1。

© www.soinside.com 2019 - 2024. All rights reserved.