【问题标题】:pass environment value defined in Kubernetes yaml config to java spring profile将 Kubernetes yaml 配置中定义的环境值传递给 java spring 配置文件
【发布时间】:2019-09-09 17:30:51
【问题描述】:

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

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”。我还尝试通过添加 spring.profiles.active=$ENV_PROFILE 来使用 application.properties 这也不起作用。

【问题讨论】:

  • 你能在入口点尝试 ($ENV_PROFILE) 代替 $ENV_PROFILE 吗?

标签: spring spring-boot kubernetes


【解决方案1】:

您也可以默认覆盖 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"

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2011-03-16
      • 1970-01-01
      • 2020-05-07
      • 2020-02-18
      • 1970-01-01
      相关资源
      最近更新 更多