Odpowiedzi:
Właśnie zapytałem Spring Cloud
facetów i pomyślałem, że powinienem podzielić się informacjami, które tu mam.
bootstrap.yml
jest ładowany wcześniej application.yml
.
Zwykle jest używany do następujących celów:
spring.application.name
i spring.cloud.config.server.git.uri
wewnątrzbootstrap.yml
encryption/decryption
informacjiTechnicznie bootstrap.yml
jest ładowany przez nadrzędną sprężynę ApplicationContext
. Ten rodzic ApplicationContext
jest ładowany przed tym, który używa application.yml
.
bootstrap.yml
?
bootstrap.yml
lub bootstrap.properties
Jest używany / potrzebny tylko, jeśli korzystasz z Spring Cloud, a konfiguracja aplikacji jest przechowywana na zdalnym serwerze konfiguracji (np. Spring Cloud Config Server).
Z dokumentacji:
Aplikacja Spring Cloud działa, tworząc kontekst „bootstrap”, który jest kontekstem nadrzędnym dla głównej aplikacji. Po wyjęciu z pudełka odpowiada za ładowanie właściwości konfiguracyjnych ze źródeł zewnętrznych , a także odszyfrowywanie właściwości w lokalnych zewnętrznych plikach konfiguracyjnych.
Zauważ, że bootstrap.yml
lub bootstrap.properties
może zawierać dodatkową konfigurację (np. Domyślne), ale generalnie wystarczy umieścić tutaj konfigurację bootstrap.
Zazwyczaj zawiera dwie właściwości:
spring.cloud.config.uri
)spring.application.name
)Po uruchomieniu Spring Cloud wykonuje połączenie HTTP do serwera konfiguracji z nazwą aplikacji i pobiera konfigurację tej aplikacji.
application.yml
lub application.properties
Zawiera standardową konfigurację aplikacji - zazwyczaj konfigurację domyślną, ponieważ każda konfiguracja pobrana podczas procesu ładowania początkowego zastąpi zdefiniowaną tutaj konfigurację.
Ta odpowiedź jest bardzo pięknie opisane w książce " Microservices Wywiad pytania, Dla Java Developers (wiosna Boot, Spring chmura, Chmura natywnych aplikacji) przez Munish chandel , wersja 1.30, 25.03.2018.
Poniższa treść została zaczerpnięta z tej książki, a całkowite uznanie dla tej odpowiedzi należy do autora książki, tj. Munish Chandel
application.yml
Plik application.yml / application.properties jest specyficzny dla aplikacji Spring Boot. O ile nie zmienisz położenia zewnętrznych właściwości aplikacji, wiosenny rozruch zawsze ładuje application.yml z następującej lokalizacji:
/src/main/resources/application.yml
W tym pliku możesz zapisać wszystkie zewnętrzne właściwości aplikacji. Wspólne właściwości, które są dostępne w dowolnym projekcie Spring Boot, można znaleźć na stronie : https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Można dostosować te właściwości jako zgodnie z potrzebami aplikacji. Przykładowy plik pokazano poniżej:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
Z drugiej strony bootstrap.yml jest specyficzny dla konfiguracji spring-cloud-config i jest ładowany przed application.yml
Plik bootstrap.yml jest potrzebny tylko wtedy, gdy używasz Spring Cloud, a konfiguracja mikrousług jest przechowywana na zdalnym serwerze konfiguracji Spring Cloud.
Ważne uwagi na temat bootstrap.yml
spring.application.name: „nazwa aplikacji” spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
Po uruchomieniu Spring Cloud wykonuje połączenie HTTP (S) do serwera konfiguracji Spring Cloud z nazwą aplikacji i odzyskuje konfigurację tej aplikacji.
application.yml zawiera domyślną konfigurację mikrousługi, a każda konfiguracja pobrana (z serwera konfiguracji chmury) podczas procesu ładowania początkowego zastąpi konfigurację zdefiniowaną w application.yml
Tylko moje 2 centy tutaj ..
Bootstrap.yml lub Bootstrap.properties służy do pobierania konfiguracji z serwera Spring Cloud.
Na przykład w pliku My Bootstrap.properties mam następującą konfigurację
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
Po uruchomieniu aplikacji próbuje pobrać konfigurację usługi, łącząc się z http: // localhost: 8888 i patrzy na Calculation-service.properties obecnego na serwerze Spring Cloud Config
Możesz sprawdzić to samo z dzienników Calcuation-Service po uruchomieniu
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Cóż, całkowicie zgadzam się z odpowiedziami, które już istnieją w tej kwestii:
bootstrap.yml
służy do zapisywania parametrów wskazujących, gdzie znajduje się zdalna konfiguracja i kontekst aplikacji rozruchowej jest tworzony za pomocą tych zdalnych konfiguracji.W rzeczywistości jest także w stanie przechowywać normalne właściwości tak samo jak co application.yml
. Ale zwróć uwagę na tę podstępną rzecz:
bootstrap.yml
, będą miały niższy priorytet niż prawie wszystkie inne źródła właściwości, w tym application.yml. Jak opisano tutaj .Wyjaśnijmy, istnieją dwa rodzaje właściwości związanych z bootstrap.yml
:
bootstrap.yml
aby znaleźć właściciela właściwości (system plików, repozytorium git lub coś innego), a właściwości, które otrzymujemy w ten sposób, mają pierwszeństwo, więc nie można ich zastąpić konfiguracją lokalną. Jak opisano tutaj .bootstrap.yml
. Jak wyjaśniono wcześniej, uzyskają niższy priorytet. Użyj ich, aby ustawić wartości domyślne, może to dobry pomysł.Różnice między umieszczaniem właściwości w application.yml
lub bootstrap.yml
w wiosennym rozruchu są następujące:
bootstrap.yml
.application.yml
będzie miało wyższy priorytet.Bootstrap.yml służy do pobierania konfiguracji z serwera. Może to być dla aplikacji chmurowej Spring lub dla innych. Zazwyczaj wygląda to tak:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Po uruchomieniu aplikacja próbuje połączyć się z danym serwerem i odczytać konfigurację na podstawie profilu sprężynowego wspomnianego w konfiguracji uruchamiania / debugowania.
Jeśli serwer jest nieosiągalny, aplikacja może nawet nie być w stanie kontynuować. Jeśli jednak konfiguracje pasujące do profilu są dostępne lokalnie, konfiguracje serwera zostaną zastąpione.
Dobre podejscie:
Utrzymaj osobny profil dla lokalnego i uruchom aplikację przy użyciu różnych profili.
Innym zastosowaniem bootstrap.yml jest ładowanie konfiguracji z mapy konfiguracyjnej kubernetes i tajnych zasobów. Aplikacja musi zaimportować zależność spring-cloud-starter-kubernetes .
Podobnie jak w przypadku Spring Cloud Config, musi to mieć miejsce podczas frazy bootstrap.
Z dokumentów:
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
Tak więc właściwości przechowywane w zasobie configmap z meta.name nazwa-domyślna mogą być przywoływane tak samo jak właściwości w application.yml
Ten sam proces dotyczy tajemnic:
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 to pierwszy plik ładowany podczas uruchamiania aplikacji Spring Boot, a application.property jest ładowany podczas uruchamiania aplikacji. Tak więc możesz zachować, może to być poświadczenie serwera konfiguracji itp., W bootstrap.yml, który jest wymagany podczas ładowania aplikacji, a następnie w application.properties, które przechowujesz, może być adres URL bazy danych itp
bootstrap.yml
jest, o ile widzę, specyficzny dla [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )) i jest to konfiguracja używana do znalezienia właściwej konfiguracji. Więc konfiguracja jest prawdopodobnie ładowana przed application.properties/yaml