Использование переменной env в application.properties Spring Boot
Мы работаем надВесенний ботинок веб-приложение и база данных, которую мы используемMySql;
установка у нас есть, мы сначала проверим этов местном масштабе (означает, что нам нужно установить MySql на наш компьютер);
тогда мы подталкиваем кBitbucket;
Дженкинс автоматически обнаруживает новый push-запрос в Bitbucket и выполняет сборку на нем (для прохождения сборки Jenkins mvn нам также необходимо установить MySql на виртуальных машинах, на которых работает Jenkins).
если Jenkins выполняет сборку, мы помещаем код в наше приложение наOpenShift (используя плагин развертывания Openshift на Jenkins).
Проблема у нас есть как вы уже поняли, это то, что:
вapplication.properties
мы не можем жестко закодировать информацию MySql. Так как наш проект будет работать в 3 разных местах (местный, Дженкинс, а такжеOpenShift) нам нужно сделать поле источника данных динамическим вapplication.properties
(мы знаем, что есть разные способы сделать это, но мы сейчас работаем над этим решением).
spring.datasource.url =
spring.datasource.username =
spring.datasource.password =
Решение, которое мы придумали, это мысоздать системные переменные среды локально и в Jenkins vm (называя их так же, как их называет 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<String, String> 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
и это то, с чем у нас проблемы.
В какой папке и как мы должны назначитьpassword
, userName
, sqlURL
, а такжеsqlPort
переменные дляapplication.properties
чтобы увидеть их и как мы включаем их вapplication.properties
?
Мы перепробовали много вещей, одна из которых:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Пока не повезло. Возможно, мы не помещаем эти переменные env в нужный класс / папку или используем их неправильно вapplication.properties
.
Ваша помощь высоко ценится!
Спасибо!