Весенняя загрузка запускается, даже если начинается с несуществующего профиля

#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 . И у меня есть 4 yaml файла — 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} их нет . Загрузка профиля не означает загрузку файла свойств.