Использование переменных окружения в файле application.yml
Быстрый ответ
Да, файл application.yml
поддерживает частное использование переменных окружения в Spring Boot, их можно вызвать при помощи записи формата ${ENV_VAR}
. Вот пример:
server:
port: ${PORT:8080}
В данном примере переменная ${PORT}
указывает на порт сервера. Если переменная PORT
определена в окружении, то её значение переопределит порт. В противном случае будет использоваться значение по умолчанию — 8080
.
Можно также использовать значения переменных окружения посредством специфической нотации Spring, как это продемонстрировано в вышеуказанном примере.
Для более глубокого понимания работы плейсхолдеров можно обратиться к документации Spring Boot, где содержится всеобъемлющая информация о работе с application.yml
.
Ваш помощник YAML — Переменные окружения
Оживающий огонь @Value
Аннотация @Value
в Spring позволяет интегрировать переменные окружения непосредственно там, где они требуются:
@Value("${HOME_SWEET_HOME:/root}") // Это ваш домашний путь, если не указана переменная HOME_SWEET_HOME!
private String homeDir;
Если переменной HOME_SWEET_HOME
не существует, то по умолчанию будет использоваться /root
.
Приоритет аргументов командной строки
Аргументы командной строки оказываются крайне полезными для интегрирования переменных, которые могут меняться, – они могут модифицировать настройки из application.yml
:
java -jar myWildJar.jar --server.port=${PORT} // Пора выпустить невиданное! 🔥💪
План Б: системные умолчания
Запасные значения в application.yml
служат своеобразной альтернативой, когда основные настройки отсутствуют:
database:
host: ${DB_HOST:localhost} // Где сердце, там и дом (или база данных).
port: ${DB_PORT:3306}
Если переменные DB_HOST
и DB_PORT
не определены, на подмогу придут значения localhost
и 3306
.
Помощь среды разработки
Среда разработки, такая как IntelliJ, предлагает функционал для работы с переменными окружения – это особый приоритетный доступ к окружению приложения.
Визуализация
Рассмотрим application.yml
и переменные окружения как книгу рецептов и ингредиенты:
application.yml (т.е. Книга рецептов 📖):
Переменные окружения (т.е. Ингредиенты 🍎🥦🍊):
- TEMP: 'RoomTemp'
- LIGHT: 'Shade'
Результирующая конфигурация (т.е. Подав на стол блюдо 🍛):
- temperature: ${TEMP} # RoomTemp
- light: ${LIGHT} # Shade
application.yml
использует переменные окружения для настройки служб, подобно тому, как рецепт перерабатывает ингредиенты в готовое блюдо.
Хранилище секретов
Безопасность секретной информации
Необходимо упускать из виду прямого указания чувствительных данных, вроде паролей или ключей API, в application.yml
либо прямо в коде:
shh-hide-it-here:
myPassword: ${MY_PASSWORD} // Вы помните, что секреты следует хранить в секрете?
Переменные окружения обеспечивают конфиденциальность данных и облегчают замену учетных записей.
Привязка к файлам и профилям
Используйте профили и соответствующие им файлы application-{profile}.yml
для более детального управления конфигурацией:
java -jar shinyApp.jar --spring.profiles.active=prod // Вот и пришло время продакшена!
Файлы, настроенные под конкретное окружение, предотвратят возможные ошибки.
Преодоление различий в окружениях
Особенности платформ и облачных провайдеров
Изучите особенности использования переменных окружения в контексте выбранной вами платформы или облачного провайдера.
Изоляция конфигурации
Практика хранения конфигурации независимо от кода способствует удобству обслуживания и гибкому управлению.
Создайте надежную систему
Тестирование способов интеграции и разрешения переменных окружения гарантирует их надежную работу в различных условиях, будь то локальная разработка или производственное развертывание.
Полезные материалы
- Основные функциональные возможности — Официальная документация Spring Boot.
- Как использовать переменные окружения в application.properties — обсуждение на Stack Overflow.
- Spring PropertySource и YAML — руководство по использованию YAML с @PropertySource в Spring на Stack Overflow.
- Spring Cloud Config Environment Repository — управление окружениями через Spring Cloud.
- DZone — статья о
@PropertySource
в Spring Boot.