В работе с веб-приложениями на Spring Boot часто возникает потребность использовать различные настройки для разных окружений: локальное, тестовое, продуктивное и т.д.
Допустим, есть веб-приложение, которое использует базу данных MySQL. Это приложение сначала тестируется локально, затем код отправляется в репозиторий Bitbucket, где его проверяет Jenkins. Если сборка успешна, приложение разворачивается на OpenShift.
В такой ситуации возникает проблема с настройками доступа к базе данных, которые указаны в файле application.properties
. Нельзя жестко задавать эти параметры, потому что они будут отличаться в зависимости от окружения.
spring.datasource.url =
spring.datasource.username =
spring.datasource.password =
Одно из возможных решений — использование системных переменных окружения. Для этого создаются переменные окружения с соответствующими названиями и значениями.
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"
Затем эти переменные можно использовать в Java-коде таким образом:
Map<String, String> env = System.getenv(); 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");
Однако возникает вопрос, как использовать эти переменные в файле application.properties
.
Например, было предпринято следующее попытка:
spring.datasource.url = ${sqlURL}:${sqlPort}/»nameofDB»
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Но это не сработало из-за того, что переменные окружения не были правильно заданы или использованы в файле application.properties
.
Правильный способ использования переменных окружения в Spring Boot
Чтобы использовать переменные окружения в Spring Boot, нужно указать их в файле application.properties
следующим образом:
spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/nameofDB
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}
Таким образом, Spring Boot будет автоматически подставлять значения системных переменных окружения вместо плейсхолдеров в фигурных скобках.
Этот подход позволяет гибко настраивать приложение под различные окружения, избегая жесткого кодирования настроек.
Добавить комментарий