В чем разница между помещением свойства в application.yml или bootstrap.yml при весенней загрузке? В случае logging.config приложение работает иначе.
В чем разница между помещением свойства в application.yml или bootstrap.yml при весенней загрузке?
Ответ 1
Я только что спросил парней Spring Cloud
и подумал, что должен поделиться информацией, которую я здесь.
bootstrap.yml
загружается до application.yml
.
Он обычно используется для следующего:
- при использовании Spring Cloud Config Server вы должны указать
spring.application.name
иspring.cloud.config.server.git.uri
внутриbootstrap.yml
- информация о
encryption/decryption
Технически, bootstrap.yml
загружается родительским Spring ApplicationContext
. Этот родительский ApplicationContext
загружается до того, который использует application.yml
.
Ответ 2
bootstrap.yml
или bootstrap.properties
Он используется только/необходим, если вы используете Spring Cloud, а ваша конфигурация приложения хранится на удаленном сервере конфигурации (например, Spring Cloud Config Server).
Из документации:
A Spring Облачное приложение работает, создавая контекст "начальной загрузки", который является родительским контекстом для основного приложения. Из коробки он отвечает за загрузку свойств конфигурации из внешних источников, а также дешифрование свойств в локальных файлах внешней конфигурации.
Обратите внимание, что bootstrap.yml
или bootstrap.properties
могут содержать дополнительную конфигурацию (например, по умолчанию), но обычно вам нужно только установить здесь конфигурацию bootstrap.
Обычно он содержит два свойства:
- расположение сервера конфигурации (
spring.cloud.config.uri
) - имя приложения (
spring.application.name
)
При запуске Spring Cloud делает HTTP-вызов на сервере конфигурации с именем приложения и возвращает обратно эту конфигурацию приложения.
application.yml
или application.properties
Содержит стандартную конфигурацию приложения - обычно конфигурацию по умолчанию, так как любая конфигурация, полученная во время процесса начальной загрузки, переопределит конфигурацию, определенную здесь.
Ответ 3
Этот ответ был очень красиво объяснен в книге "Вопросы для интервью по микросервисам, для разработчиков Java (Spring Boot, Spring Cloud, Cloud Собственные приложения) от Munish Chandel, версия 1.30, 25.03.2018.
Следующее содержание было взято из этой книги, и общий кредит за этот ответ идет к автору книги, т.е. Munish Chandel
application.yml
Файл application.yml/application.properties специфичен для приложений Spring Boot. Если вы не измените расположение внешних свойств приложения, весенняя загрузка всегда будет загружать application.yml из следующего расположения:
/src/main/resources/application.yml
Вы можете сохранить все внешние свойства для вашего приложения в этом файле. Общие свойства, доступные в любом проекте Spring Boot, можно найти по адресу: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Вы можете настроить эти свойства в соответствии с потребностями своего приложения. Пример файла показан ниже:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
С другой стороны, файл bootstrap.yml специфичен для spring-cloud-config и загружается до application.yml
bootstrap.yml требуется только в том случае, если вы используете Spring Cloud и ваша конфигурация микросервиса хранится на удаленном сервере Spring Cloud Config.
Важные моменты о bootstrap.yml
- При использовании с сервером Spring Cloud Config вы должны указать имя приложения и расположение git-конфигурации, используя следующие свойства.
spring.application.name: "application-name" spring.cloud.config.server.git.uri: "git-uri-config"
- При использовании с микросервисами (кроме облачного сервера конфигурации) нам необходимо указать имя приложения и местоположение сервера конфигурации, используя указанные ниже свойства
spring.application.name: spring.cloud.config.uri:
- Этот файл свойств может содержать другую конфигурацию, относящуюся к среде Spring Cloud, например: Расположение сервера eureka, свойства, связанные с шифрованием/дешифрованием.
После запуска Spring Cloud выполняет HTTP (S) вызов сервера Spring Cloud Config с именем приложения и возвращает конфигурацию этих приложений.
application.yml содержит конфигурацию по умолчанию для микросервиса, и любая конфигурация, полученная (с сервера облачной конфигурации) в процессе начальной загрузки, переопределит конфигурацию, определенную в application.yml
Ответ 4
Bootstrap.yml используется для получения конфигурации с сервера. Это может быть для облачного приложения Spring или для других. Обычно это выглядит так:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Когда мы запускаем приложение, оно пытается подключиться к данному серверу и прочитать конфигурацию, основываясь на весеннем профиле, упомянутом в конфигурации run/debug.
Если сервер недоступен, приложение может даже не продолжить работу. Однако, если конфигурации, соответствующие профилю, присутствуют локально, настройки сервера переопределяются.
Хороший подход:
Поддерживать отдельный профиль для локального и запустить приложение, используя разные профили.
Ответ 5
Просто мои 2 цента здесь..
Bootstrap.yml или Bootstrap.properties используется для получения конфигурации из Spring Cloud Server.
Например, в файле My Bootstrap.properties у меня есть следующий Config
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
При запуске приложения оно пытается получить конфигурацию для службы, подключившись к http://localhost: 8888, и просматривает Calculation-service.properties, представленные на сервере Spring Cloud Config.
Вы можете проверить то же самое из журналов Расчёт-Сервис при запуске
INFO 10988 --- [ restartedMain] cccConfigServicePropertySourceLocator: Fetching config from server at: http://localhost:8888
Ответ 6
Ну, я полностью согласен с уже существующими ответами по этому вопросу:
-
bootstrap.yml
используется для сохранения параметров, указывающих, где находится удаленная конфигурация, и с этой удаленной конфигурацией создается контекст приложения Bootstrap.
На самом деле, он также может хранить обычные свойства так же, как и файл application.yml
. Но обратите внимание на эту сложную вещь:
- Если вы поместите свойства в
bootstrap.yml
, они получат более низкий приоритет, чем почти любые другие источники свойств, включая application.yml. Как описано здесь.
Давайте поясним, что существует два вида свойств, связанных с bootstrap.yml
:
- Свойства, которые загружаются на этапе начальной загрузки. Мы используем
bootstrap.yml
чтобы найти держатель свойств (файловая система, git-репозиторий или что-то еще), и свойства, которые мы получаем таким образом, имеют высокий приоритет, поэтому они не могут быть переопределены локальной конфигурацией. Как описано здесь. - Свойства, которые находятся в
bootstrap.yml
. Как объяснялось ранее, они получат более низкий приоритет. Используйте их для установки значений по умолчанию, может быть, это хорошая идея.
Таким образом, различия между помещением свойства в application.yml
или bootstrap.yml
при весенней загрузке:
- Свойства для загрузки файлов конфигурации в фазе начальной загрузки могут быть помещены только в
bootstrap.yml
. - Как и для всех других типов свойств, поместите их в
application.yml
получит более высокий приоритет.