Использование переменной env в файле application.properties Spring BootJAVA

Программисты JAVA общаются здесь
Anonymous
Использование переменной env в файле application.properties Spring Boot

Сообщение Anonymous »

Мы работаем над веб-приложением Spring Boot, и в качестве базы данных мы используем MySQL;
  • У нас есть первая настройка протестируйте его локально (это означает, что нам нужно установить MySQL на наш компьютер);
  • затем мы отправим запрос на Bitbucket;
  • Jenkins автоматически обнаруживает новую отправку на Bitbucket и выполняет сборку на ее основе (чтобы сборка Jenkins mvn прошла, нам также необходимо установить MySQL на виртуальные машины, на которых работает Jenkins).
  • если сборка Jenkins проходит успешно, мы передаем код в наше приложение на OpenShift (используя плагин развертывания Openshift на Дженкинсе).
Проблема, с которой мы столкнулись, как вы, возможно, уже поняли, заключается в следующем:
  • в application.properties мы не можем жестко закодировать информацию MySQL. Поскольку наш проект будет работать в трех разных местах (local, Jenkins и OpenShift), нам необходимо сделать поле источника данных динамическим в приложении. .properties (мы знаем, что есть разные способы сделать это, но сейчас работаем над этим решением).

    Код: Выделить всё

      spring.datasource.url =
    spring.datasource.username =
    spring.datasource.password =
    
Мы придумали решение: создать переменные системной среды локально и на виртуальной машине Jenkins (назвав их одинаковыми). как OpenShift называет их) и присваивает им правильные значения соответственно:

Код: Выделить всё

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"
Мы это сделали, и это работает. Мы также проверили с помощью Map env = System.getenv();, что переменные среды могут быть преобразованы в переменные Java как таковые:

Код: Выделить всё

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST");
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");
Теперь осталось только использовать эти переменные Java в нашем application.properties, и именно с этим у нас возникают проблемы.
В какой папке и как нам нужно назначить переменные пароля, userName, sqlURL и sqlPort для application.properties > чтобы иметь возможность их видеть и как включить их в application.properties?
Мы попробовали много вещей, одна из них:

Код: Выделить всё

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Пока не повезло. Вероятно, мы не помещаем эти переменные среды в правильный класс/папку или неправильно используем их в application.properties.

Подробнее здесь: https://stackoverflow.com/questions/355 ... properties

Вернуться в «JAVA»