Ответы:
Я только что спросил Spring Cloud
парней и подумал, что я должен поделиться информацией, которую я имею здесь.
bootstrap.yml
загружен раньше application.yml
.
Обычно используется для следующего:
spring.application.name
и spring.cloud.config.server.git.uri
внутриbootstrap.yml
encryption/decryption
информацияТехнически, bootstrap.yml
загружается родительским Spring ApplicationContext
. Этот родительский ApplicationContext
загружается перед тем, который использует application.yml
.
bootstrap.yml
?
bootstrap.yml
или bootstrap.properties
Он используется / нужен только в том случае, если вы используете Spring Cloud, и конфигурация вашего приложения хранится на удаленном сервере конфигурации (например, Spring Cloud Config Server).
Из документации:
Приложение Spring Cloud работает путем создания контекста «начальной загрузки», который является родительским контекстом для основного приложения. Он отвечает за загрузку свойств конфигурации из внешних источников , а также за дешифрование свойств в локальных внешних файлах конфигурации.
Обратите внимание, что bootstrap.yml
или bootstrap.properties
может содержать дополнительную конфигурацию (например, настройки по умолчанию), но обычно вам нужно только указать конфигурацию начальной загрузки здесь.
Обычно он содержит два свойства:
spring.cloud.config.uri
)spring.application.name
)После запуска Spring Cloud выполняет HTTP-вызов на сервер конфигурации с именем приложения и возвращает конфигурацию этого приложения.
application.yml
или application.properties
Содержит стандартную конфигурацию приложения - обычно конфигурацию по умолчанию, так как любая конфигурация, полученная в процессе начальной загрузки, переопределит конфигурацию, определенную здесь.
Этот ответ был очень красиво объяснен в книге « Вопросы интервью на микроуслугах, для разработчиков Java (Spring Boot, Spring Cloud, Cloud Native Applications) », Munish Chandel , версия 1.30, 25.03.2018.
Следующее содержание было взято из этой книги, и полный ответ за этот ответ достается автору книги, т.е. Мунишу Чанделю.
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.application.name: "имя-приложения" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
После запуска Spring Cloud выполняет HTTP (S) -провождение к серверу Spring Cloud Config с именем приложения и возвращает конфигурацию этого приложения.
application.yml содержит конфигурацию по умолчанию для микросервиса, и любая конфигурация, полученная (с сервера облачной конфигурации) в процессе начальной загрузки, переопределит конфигурацию, определенную в application.yml
Просто мои 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] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Ну, я полностью согласен с уже существующими ответами по этому вопросу:
bootstrap.yml
используется для сохранения параметров, указывающих, где находится удаленная конфигурация, и с этой удаленной конфигурацией создается контекст приложения Bootstrap .На самом деле, он также может хранить обычные свойства так же, как и то, что application.yml
делают. Но обратите внимание на эту хитрую вещь:
bootstrap.yml
, они получат более низкий приоритет, чем почти любые другие источники свойств, включая application.yml. Как описано здесь .Давайте поясним, что есть два типа свойств, связанных с bootstrap.yml
:
bootstrap.yml
чтобы найти держатель свойств (файловая система, git-репозиторий или что-то еще), и свойства, которые мы получаем таким образом, имеют высокий приоритет, поэтому они не могут быть переопределены локальной конфигурацией. Как описано здесь .bootstrap.yml
. Как объяснялось ранее, они получат более низкий приоритет. Используйте их для установки значений по умолчанию, может быть, это хорошая идея.Таким образом, различия между помещением свойства в application.yml
или bootstrap.yml
при загрузке весной:
bootstrap.yml
.application.yml
будет иметь более высокий приоритет.Bootstrap.yml используется для получения конфигурации с сервера. Это может быть для облачного приложения Spring или для других. Обычно это выглядит так:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Когда мы запускаем приложение, оно пытается подключиться к данному серверу и прочитать конфигурацию, основываясь на весеннем профиле, упомянутом в конфигурации run / debug.
Если сервер недоступен, приложение может даже не продолжить работу. Однако, если конфигурации, соответствующие профилю, присутствуют локально, настройки сервера переопределяются.
Хороший подход:
Поддерживать отдельный профиль для локального и запустить приложение, используя разные профили.
Другое использование для bootstrap.yml - загрузка конфигурации из configmap и секретных ресурсов kubernetes . Приложение должно импортировать spring-cloud-starter-kubernetes зависимость .
Как и в случае Spring Cloud Config, это должно происходить во время начальной загрузки.
Из документов:
spring:
application:
name: cloud-k8s-app
cloud:
kubernetes:
config:
name: default-name
namespace: default-namespace
sources:
# Spring Cloud Kubernetes looks up a ConfigMap named c1 in namespace default-namespace
- name: c1
Поэтому к свойствам, хранящимся в ресурсе configmap с именем meta.name default-name, можно ссылаться точно так же, как и к свойствам в application.yml.
И тот же процесс относится к секретам:
spring:
application:
name: cloud-k8s-app
cloud:
kubernetes:
secrets:
name: default-name
namespace: default-namespace
sources:
# Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
- name: s1
Bootstrap.yml - это первый файл, загружаемый при запуске весенней загрузки приложения, а application.property загружается при запуске приложения. Таким образом, вы можете сохранить учетные данные вашего сервера конфигурации и т. Д. В файле bootstrap.yml, который требуется при загрузке приложения, а затем в файле application.properties, который вы сохраняете, может быть URL базы данных и т. Д.
bootstrap.yml
насколько я вижу, специфичен для [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )), и это конфигурация, используемая для поиска правильной конфигурации. Так что