передайте значение среды, определенное в конфигурации Kubernetes yaml, в профиль java spring

#spring #spring-boot #kubernetes

#spring #spring-boot #kubernetes

Вопрос:

У меня есть следующее в моем Dockerfile для запуска моего приложения Springboot:

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

Я определил свою переменную окружения (ENV_PROFILE) в моей конфигурации k8 YAML следующим образом:

  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
, но это тоже не сработало.

Комментарии:

1. можете ли вы попробовать ($ENV_PROFILE) вместо $ENV_PROFILE в entrypoint?

Ответ №1:

Вы также можете переопределить свойства Spring (и другие свойства, определенные в свойствах приложения) по умолчанию, не указывая, какую переменную среды передавать в вашем файле свойств. Переменные среды имеют более высокий приоритет, чем значения файла свойств.

Смотрите также Внешнюю конфигурацию Spring.

Например:

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

Ответ №2:

Это связано с тем, что вы не используете shell в своей точке ВХОДА. Только оболочка может выполнять замены переменных среды. В вашем случае вы можете использовать следующую ТОЧКУ ВХОДА:

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

Этот синтаксис включает вызов «/ bin / sh -c ENTRYPOINT», а «exec» гарантирует, что java станет PID 1 внутри контейнера.