В чем разница между помещением свойства в application.yml или bootstrap.yml при весенней загрузке?

251

В чем разница между помещением свойства в application.yml или bootstrap.yml при весенней загрузке? В случае logging.config приложение работает иначе.

Рысь
источник
14
bootstrap.yml насколько я вижу, специфичен для [ spring-cloud-config] ( cloud.spring.io/spring-cloud-config/… )), и это конфигурация, используемая для поиска правильной конфигурации. Так что
конфиг

Ответы:

297

Я только что спросил 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.

Майкл Исви
источник
6
Не могли бы вы объяснить, почему Config Server нужно поместить эти параметры в bootstrap.yml?
Нео
31
При использовании Spring Cloud «реальные» данные конфигурации обычно загружаются с сервера. Чтобы получить URL-адрес (и другую конфигурацию соединения, такую ​​как пароли и т. Д.), Вам нужна более ранняя или «начальная» конфигурация. Таким образом, вы помещаете атрибуты сервера конфигурации в bootstrap.yml, который используется для загрузки реальных данных конфигурации (которые обычно переопределяют то, что находится в application.yml [если имеется]).
Майк Мэнселл
10
иногда я задаюсь вопросом, когда весна приносит новые захватывающие функции, она оставляет позади соглашение над спецификацией, или они предполагают, что уже принято соглашение, и ничего не нужно указывать, и все будет решено само по себе, если не к весне, то к загрузке весной и может быть в будущем весной. загрузки загрузка;)
Саурабй
Когда вы говорите, что bootstrap.yml загружается до application.yml. Но когда я удаляю application.yml. Мое приложение не читает bootstrap.yml. Это почему?
Джесси
Мы должны подчеркнуть, что файл начальной загрузки никогда не переопределяется, потому что он имеет больший приоритет. Согласно документации Team's Spring
kelgwiin
84

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

Содержит стандартную конфигурацию приложения - обычно конфигурацию по умолчанию, так как любая конфигурация, полученная в процессе начальной загрузки, переопределит конфигурацию, определенную здесь.

dustin.schultz
источник
34

Этот ответ был очень красиво объяснен в книге « Вопросы интервью на микроуслугах, для разработчиков 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

  1. При использовании с сервером Spring Cloud Config вы должны указать имя приложения и расположение git-конфигурации, используя следующие свойства.
spring.application.name: "имя-приложения"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. При использовании с микросервисами (кроме облачного сервера конфигурации) нам необходимо указать имя приложения и местоположение сервера конфигурации, используя следующие свойства
spring.application.name: 
spring.cloud.config.uri: 
  1. Этот файл свойств может содержать другую конфигурацию, относящуюся к среде Spring Cloud, например расположение сервера eureka, свойства, связанные с шифрованием / дешифрованием.

После запуска Spring Cloud выполняет HTTP (S) -провождение к серверу Spring Cloud Config с именем приложения и возвращает конфигурацию этого приложения.

application.yml содержит конфигурацию по умолчанию для микросервиса, и любая конфигурация, полученная (с сервера облачной конфигурации) в процессе начальной загрузки, переопределит конфигурацию, определенную в application.yml

Вайбхав Шарма
источник
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] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888

Dixit Gangaiah
источник
4

Ну, я полностью согласен с уже существующими ответами по этому вопросу:

  • bootstrap.ymlиспользуется для сохранения параметров, указывающих, где находится удаленная конфигурация, и с этой удаленной конфигурацией создается контекст приложения Bootstrap .

На самом деле, он также может хранить обычные свойства так же, как и то, что application.ymlделают. Но обратите внимание на эту хитрую вещь:

  • Если вы поместите свойства в bootstrap.yml, они получат более низкий приоритет, чем почти любые другие источники свойств, включая application.yml. Как описано здесь .

Давайте поясним, что есть два типа свойств, связанных с bootstrap.yml:

  • Свойства, которые загружаются на этапе начальной загрузки. Мы используем, bootstrap.ymlчтобы найти держатель свойств (файловая система, git-репозиторий или что-то еще), и свойства, которые мы получаем таким образом, имеют высокий приоритет, поэтому они не могут быть переопределены локальной конфигурацией. Как описано здесь .
  • Свойства, которые находятся в bootstrap.yml. Как объяснялось ранее, они получат более низкий приоритет. Используйте их для установки значений по умолчанию, может быть, это хорошая идея.

Таким образом, различия между помещением свойства в application.ymlили bootstrap.ymlпри загрузке весной:

  • Свойства для загрузки файлов конфигурации в фазе начальной загрузки могут быть размещены только в bootstrap.yml.
  • Что касается всех других видов свойств, их размещение application.ymlбудет иметь более высокий приоритет.
Lebecca
источник
3

Bootstrap.yml используется для получения конфигурации с сервера. Это может быть для облачного приложения Spring или для других. Обычно это выглядит так:

spring:
  application:
    name: "app-name"
  cloud:
    config:
      uri: ${config.server:http://some-server-where-config-resides}

Когда мы запускаем приложение, оно пытается подключиться к данному серверу и прочитать конфигурацию, основываясь на весеннем профиле, упомянутом в конфигурации run / debug. bootstrap.yml загружает первый

Если сервер недоступен, приложение может даже не продолжить работу. Однако, если конфигурации, соответствующие профилю, присутствуют локально, настройки сервера переопределяются.

Хороший подход:

Поддерживать отдельный профиль для локального и запустить приложение, используя разные профили.

Судип Бхандари
источник
1

Другое использование для 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
Джек Бикен
источник
0

Bootstrap.yml - это первый файл, загружаемый при запуске весенней загрузки приложения, а application.property загружается при запуске приложения. Таким образом, вы можете сохранить учетные данные вашего сервера конфигурации и т. Д. В файле bootstrap.yml, который требуется при загрузке приложения, а затем в файле application.properties, который вы сохраняете, может быть URL базы данных и т. Д.

Анвар сэр
источник