Відповіді:
Я щойно запитав Spring Cloud
хлопців і подумав, що я повинен поділитися інформацією, яку я маю тут.
bootstrap.yml
завантажується раніше application.yml
.
Зазвичай він використовується для наступного:
spring.application.name
і spring.cloud.config.server.git.uri
всерединіbootstrap.yml
encryption/decryption
інформаціюТехнічно bootstrap.yml
завантажується батьківською пружиною 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) " Муніша Чанделя , версія 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
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 з іменем програми та повертає назад конфігурацію програми.
application.yml містить конфігурацію за замовчуванням для мікросервісу, і будь-яка конфігурація, отримана (з сервера конфігурації хмари) під час процесу завантаження, буде змінювати конфігурацію, визначену в application.yml
Просто мої 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
Ну, я повністю згоден з відповідями, які вже існують на даний момент:
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 cloud або для інших. Зазвичай це виглядає так:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Коли ми запускаємо програму, вона намагається підключитися до даного сервера і зчитувати конфігурацію на основі пружинного профілю, зазначеного в конфігурації run / debug.
Якщо сервер недоступний, програма може навіть не мати можливості продовжувати роботу. Однак якщо локально існують конфігурації, що відповідають профілю, конфігурації сервера переосмислюються.
Хороший підхід:
Підтримуйте окремий профіль для локальних і запускайте додаток, використовуючи різні профілі.
Ще одне використання для 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
Bootstrap.yml - це перший файл, завантажений під час запуску весняного завантажувального програми та application.property завантажується при запуску програми. Отже, ви зберігаєте, це можуть бути дані вашого сервера конфігурації тощо, у bootstrap.yml, який потрібен під час завантаження програми, а потім у application.properties, яку ви зберігаєте, може бути URL-адреса бази даних тощо.
bootstrap.yml
наскільки я бачу специфічну для [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )), і це конфігурація, що використовується для пошуку потрібної конфігурації. Отже, конфігурація, ймовірно, завантажується перед application.properties/yaml