использование весенней загрузки заполнителя в свойствах приложения - PullRequest
0 голосов
/ 13 ноября 2018

Я написал простое приложение для весенней загрузки (версия springboot 2.0), которое использует mysql (версия 5.7).

application.properties фрагмент

spring.datasource.url = jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username = testuser
spring.datasource.password = testpassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Когда я запускаю его локально, он работает нормально. Если я хочу запустить это весеннее загрузочное приложение в Docker, я могу изменить

spring.datasource.url = jdbc:mysql://mysql-container:3306/test?useSSL=false

mysql-контейнер запускается с использованием mysql: 5.7 образа из dockerhub.

Однако я хочу изменить значение хоста из некоторого файла свойств заполнителя. так что это выглядит примерно так:

spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false

примечание: я не уверен насчет формата заполнителя. Это $ {MYSQL_HOST} или @ MYSQL_HOST @?

Вы можете назвать этот файл-заполнитель как placeholder.properties или placeholder.conf или .env или как угодно. Содержимое этого файла должно быть примерно таким:

MYSQL_HOST=localhost

или

MYSQL_HOST=some ip address

Я могу создать .env или .env.test или .env.prod, и я могу ссылаться на этот файл env в зависимости от того, где я хочу запустить приложение.


ОБНОВЛЕНИЕ -

У меня два вопроса:

  1. Где мне хранить placeholder.properties? Это в / config / или в каком-то определенном каталоге?

  2. как вызвать заполнитель внутри application.properties?

может кто-нибудь подсказать?

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Благодаря ответам @Raheela Aslam и @ paulsm4 и еще нескольким исследованиям обнаружена проблема.

Чего я пытался достичь:

  1. Разверните приложение Springboot в Docker, а затемв kubernetes.
  2. Я использовал minikube для локального тестирования и хотел передать ip minikube в URL источника данных.

Как я это исправил:

Я создал configmap дляmysql_user, mysql_password, mysql_host с соответствующими значениями.

kubectl create configmap mysql-config \
--from-literal=mysql_user=testuser \
--from-literal=mysql_password=testuserpass \
--from-literal=mysql_user=$(minikube ip) 

и использовали их внутри application.properties что-то вроде ниже

spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/test?useSSL=false
spring.datasource.username = ${MYSQL_USER}
spring.datasource.password = ${MYSQL_PASSWORD}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

, а затем использовали значения configmap в deploy.yaml для kubernetes.Затем запустил службу для развертывания.

0 голосов
/ 18 января 2019

Если вы проектируете Maven, вы можете использовать фильтр maven:

<build>
  <filters>
            <filter>src/main/filters/myfilter.properties</filter>
  </filters>
</build>

Это генерирует /target/classes/application.properties, который был отфильтрован, чтобы содержать значения свойств (с замененными заполнителями)

http://www.avajava.com/tutorials/lessons/how-do-i-filter-resources-based-on-values-from-a-properties-file.html?page=1

0 голосов
/ 13 ноября 2018

ПРЕДЛОЖЕНИЕ: Если у вас сравнительно небольшое количество # / свойств, почему бы просто не иметь отдельный файл application.properties для каждой отдельной среды?

Вы бы указали среду во время выполнения с помощью -Dspring.profiles.active=myenv.

Смотрите здесь и здесь .

PS:

Чтобы ответить на ваш конкретный вопрос: синтаксис: ${MYSQL_HOST}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...