Яка різниця між розміщенням властивості на application.yml або bootstrap.yml у весняному завантаженні?


251

Яка різниця між розміщенням властивості на application.yml або bootstrap.yml у весняному завантаженні? У випадку logging.config додаток працює по-різному.


14
bootstrap.yml наскільки я бачу специфічну для [ spring-cloud-config] ( cloud.spring.io/spring-cloud-config/… )), і це конфігурація, що використовується для пошуку потрібної конфігурації. Отже, конфігурація, ймовірно, завантажується перед application.properties/yaml
zapl

Відповіді:


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завантажується батьківською пружиною ApplicationContext. Цей батько ApplicationContextзавантажується перед тим, який використовує application.yml.


6
Чи можете ви поясніть, чому Config Server потрібно вводити ці параметри bootstrap.yml?
Нео

31
Під час використання Spring Cloud "реальні" дані конфігурації зазвичай завантажуються з сервера. Для отримання URL-адреси (та іншої конфігурації підключення, наприклад паролів тощо) потрібна попередня конфігурація або "завантажувальна". Таким чином, ви поміщаєте атрибути конфігураційного сервера в bootstrap.yml, який використовується для завантаження реальних даних конфігурації (що зазвичай переосмислює те, що знаходиться в application.yml [якщо є]).
Майк Манселл

10
інколи мені цікаво, коли весна приносить нові захоплюючі особливості, вона залишає поза конвенцією над специфікацією, або вони припускають її вже умову, і нічого не потрібно уточнювати, і все буде вирішено самостійно, якщо не весною, то весняним завантаженням і може бути в майбутньому весною, boot-boot;)
Саураб

Коли ви говорите, bootstrap.yml завантажується перед application.yml. Але коли я видаляю application.yml. Моя програма не читає bootstrap.yml. Чому так?
Джессі

Ми повинні підкреслити, що файл завантажувального файлу ніколи не переосмислюється, оскільки має більше пріоритету. Відповідно до документації Весна команди
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

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


34

Ця відповідь була дуже красиво пояснена в книзі " Питання щодо інтерв'ю з мікросервісами для розробників Java (Spring Boot, Spring Cloud, Cloud Native Applications) " Муніша Чанделя , версія 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.

Важливі моменти щодо 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 з іменем програми та повертає назад конфігурацію програми.

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


5

Просто мої 2 центи тут ..

Bootstrap.yml або Bootstrap.properties використовується для отримання конфігурації з Spring Cloud Server.

Наприклад, у файлі My Bootstrap.properties у мене є така конфігурація

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


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них отримає більшу перевагу.

3

Bootstrap.yml використовується для отримання конфігурації з сервера. Це може бути для додатка Spring cloud або для інших. Зазвичай це виглядає так:

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

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

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

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

Підтримуйте окремий профіль для локальних і запускайте додаток, використовуючи різні профілі.


1

Ще одне використання для bootstrap.yml - це завантаження конфігурації з конфігураційної карти 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 з мета-ім'ям за замовчуванням, можна посилатись так само, як і на властивості в 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-адреса бази даних тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.