#spring-boot #yaml #spring-profiles
#пружинный ботинок #yaml #spring-профили
Вопрос:
У меня есть приложение spring boot — server.jar
со следующей структурой:
-resources
-application.yaml
После сборки я создаю папку с именем source
. И положите мою банку в эту папку. Кроме того, я создаю начальный .bat
файл
-source
-server.jar
-start.bat
В start.but
файле я пишу следующее:
java -Dspring.profiles.active="foofoofoo" -jar server.jar
pause
Когда я запускаю start.bat
, мой сервер запускается с журналом:
The following profiles are active: foofoofoo
И используйте свойства из application.yaml
. У меня нет профиля с именем foofoofoo
, и у меня его нет apllication-foofoofoo.yaml
. Почему? Почему spring пишет, что он загружает foofoofoo
профиль, загружается application.yaml
и работает?
Это должно привести к сбою, потому что я запускаю приложение с несуществующим профилем!
Вместо этого я вижу запущенное приложение с другим свойством! Как я могу это обработать?
Комментарии:
1. Выполняет ваше приложение. yml обладает всеми свойствами, присущими приложению-вашему-profile. yml имеет?
2. @htshame У меня их нет
application-your-profile.yml
. У меня толькоapplication.yml
в моей банке3. Файл свойств, специфичный для профиля, является необязательным. Поэтому его отсутствие не приведет к сбою приложения. Профиль можно использовать для гораздо большего, чем загрузка файлов свойств. Таким образом, «отсутствующий» файл не приведет к сбою приложения, потому что он просто необязателен.
4. @ M. Deinum тогда как я могу управлять профилями. У меня есть приложение с 3 профилями —
dev,test,prod
. И у меня есть 4yaml
файла —application.yaml
,application-dev.yaml
,application-test.yaml
иapplication-prod.yaml
. Я сохраняю базовые конфигурацииapplication.yaml
и переопределяю их в других файлах yaml. И когда я запускаю приложение в тестовой среде, я передаю параметр —-Dspring.profiles.active=test
. Но еслиapplication-test.yaml
не существует — приложение запускается с.application.yaml
Это нехорошо5. Я хочу запретить запуск приложения, если оно не имеет определенных конфигураций
Ответ №1:
При запуске файл приложения application.yml
в вашем resources
каталоге все равно включается.
Если у вас также есть application-yourProfileName.yml
в resources
каталоге и добавить
--spring.profile.active=yourProfileName
параметр,
затем включаются оба файла свойств, и ОБРАТИТЕ ВНИМАНИЕ, что в этом случае application-yourProfileName.yml
переопределяются одни и те же свойства application.yml
.
Ответ №2:
Профиль можно использовать не только для свойств приложения. Это не имеет значения , если у вас application-your-profile.{properties, yml}
их нет . Загрузка профиля не означает загрузку файла свойств.