Яка різниця між розміщенням властивості на 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.