Antworten:
Ich habe gerade die Spring Cloud
Jungs gefragt und dachte, ich sollte die Informationen, die ich hier habe, teilen.
bootstrap.yml
wird vorher geladen application.yml
.
Es wird normalerweise für Folgendes verwendet:
spring.application.name
und spring.cloud.config.server.git.uri
innerhalbbootstrap.yml
encryption/decryption
InformationenTechnisch bootstrap.yml
wird von einer übergeordneten Feder geladen ApplicationContext
. Dieses übergeordnete ApplicationContext
Element wird vor dem verwendeten geladen application.yml
.
bootstrap.yml
?
bootstrap.yml
oder bootstrap.properties
Es wird nur verwendet / benötigt, wenn Sie Spring Cloud verwenden und die Konfiguration Ihrer Anwendung auf einem Remote-Konfigurationsserver (z. B. Spring Cloud Config Server) gespeichert ist.
Aus der Dokumentation:
Eine Spring Cloud-Anwendung erstellt einen "Bootstrap" -Kontext, der ein übergeordneter Kontext für die Hauptanwendung ist. Standardmäßig ist es für das Laden von Konfigurationseigenschaften aus externen Quellen sowie für das Entschlüsseln von Eigenschaften in den lokalen externen Konfigurationsdateien verantwortlich.
Beachten Sie, dass das bootstrap.yml
oder zusätzliche Konfigurationen enthalten bootstrap.properties
kann (z. B. Standardeinstellungen), aber im Allgemeinen müssen Sie hier nur die Bootstrap-Konfiguration eingeben.
Normalerweise enthält es zwei Eigenschaften:
spring.cloud.config.uri
)spring.application.name
)Beim Start ruft Spring Cloud den Konfigurationsserver mit dem Namen der Anwendung per HTTP auf und ruft die Konfiguration dieser Anwendung zurück.
application.yml
oder application.properties
Enthält die Standardanwendungskonfiguration - normalerweise die Standardkonfiguration, da jede Konfiguration, die während des Bootstrap-Prozesses abgerufen wird, die hier definierte Konfiguration überschreibt.
Diese Antwort wurde in Buch " Microservices Interview Questions, Für Java-Entwickler (Spring Boot, Spring Cloud, Cloud Native Applications)" von Munish Chandel , Version 1.30, 25.03.2018, sehr schön erklärt .
Der folgende Inhalt wurde diesem Buch entnommen, und die Gesamtgutschrift für diese Antwort geht an den Autor des Buches, dh Munish Chandel
application.yml
Die Datei application.yml / application.properties ist spezifisch für Spring Boot-Anwendungen. Sofern Sie den Speicherort der externen Eigenschaften einer Anwendung nicht ändern, lädt Spring Boot application.yml immer vom folgenden Speicherort:
/src/main/resources/application.yml
Sie können alle externen Eigenschaften für Ihre Anwendung in dieser Datei speichern. Allgemeine Eigenschaften, die in jedem Spring Boot-Projekt verfügbar sind, finden Sie unter: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Sie können diese Eigenschaften wie folgt anpassen gemäß Ihren Anwendungsanforderungen. Die Beispieldatei ist unten dargestellt:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
bootstrap.yml hingegen ist spezifisch für spring-cloud-config und wird vor der application.yml geladen
bootstrap.yml wird nur benötigt, wenn Sie Spring Cloud verwenden und Ihre Microservice-Konfiguration auf einem Remote-Spring Cloud-Konfigurationsserver gespeichert ist.
Wichtige Punkte zu bootstrap.yml
spring.application.name: "Anwendungsname" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
Beim Start ruft Spring Cloud den Spring Cloud Config Server mit dem Namen der Anwendung über HTTP (S) auf und ruft die Konfiguration dieser Anwendung zurück.
application.yml enthält die Standardkonfiguration für den Microservice. Jede Konfiguration, die (vom Cloud-Konfigurationsserver) während des Bootstrap-Prozesses abgerufen wird, überschreibt die in application.yml definierte Konfiguration
Nur meine 2 Cent hier ..
Bootstrap.yml oder Bootstrap.properties wird verwendet, um die Konfiguration von Spring Cloud Server abzurufen.
Zum Beispiel habe ich in der Datei My Bootstrap.properties die folgende Konfiguration
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
Beim Starten der Anwendung wird versucht, die Konfiguration für den Dienst durch Herstellen einer Verbindung zu http: // localhost: 8888 abzurufen, und es werden die im Spring Cloud Config-Server vorhandenen Calculation-service.properties angezeigt
Sie können dasselbe aus den Protokollen von Calcuation-Service überprüfen, wenn Sie es starten
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Nun, ich stimme voll und ganz den Antworten zu, die in diesem Punkt bereits existieren:
bootstrap.yml
wird verwendet, um Parameter zu speichern, die darauf hinweisen, wo sich die Remote-Konfiguration befindet, und der Bootstrap-Anwendungskontext wird mit dieser Remote-Konfiguration erstellt.Tatsächlich ist es auch in der Lage, normale Eigenschaften genauso zu speichern wie das, was zu application.yml
tun ist. Aber achten Sie auf diese knifflige Sache:
bootstrap.yml
, haben diese eine niedrigere Priorität als fast alle anderen Eigenschaftsquellen, einschließlich application.yml. Wie hier beschrieben .Lassen Sie uns klarstellen, dass es zwei Arten von Eigenschaften gibt, die sich auf Folgendes beziehen bootstrap.yml
:
bootstrap.yml
, um den Eigenschafteninhaber zu finden (ein Dateisystem, ein Git-Repository oder etwas anderes), und die Eigenschaften, die wir auf diese Weise erhalten, haben hohe Priorität, sodass sie nicht durch die lokale Konfiguration überschrieben werden können. Wie hier beschrieben .bootstrap.yml
. Wie bereits erläutert, haben sie eine niedrigere Priorität. Verwenden Sie sie, um Standardeinstellungen festzulegen. Dies ist möglicherweise eine gute Idee.Die Unterschiede zwischen dem Anlegen einer Immobilie an application.yml
oder bootstrap.yml
im Frühjahrsstiefel sind also:
bootstrap.yml
.application.yml
höherer Priorität.Bootstrap.yml wird verwendet, um die Konfiguration vom Server abzurufen. Dies kann für eine Spring Cloud-Anwendung oder für andere sein. Normalerweise sieht es so aus:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Wenn wir die Anwendung starten, versucht sie, eine Verbindung zum angegebenen Server herzustellen und die Konfiguration basierend auf dem in der Run / Debug-Konfiguration genannten Federprofil zu lesen.
Wenn der Server nicht erreichbar ist, kann die Anwendung möglicherweise nicht weiter fortfahren. Wenn jedoch lokal mit dem Profil übereinstimmende Konfigurationen vorhanden sind, werden die Serverkonfigurationen überschrieben.
Guter Ansatz:
Pflegen Sie ein separates Profil für lokal und führen Sie die App mit verschiedenen Profilen aus.
Eine andere Verwendung für bootstrap.yml ist das Laden der Konfiguration von kubernetes configmap und geheimen Ressourcen. Die Anwendung muss die Spring-Cloud-Starter-Kubernetes- Abhängigkeit importieren .
Wie bei der Spring Cloud Config muss dies während der Bootstrap-Phrase erfolgen.
Aus den Dokumenten:
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
So können Eigenschaften, die in der configmap-Ressource mit meta.name default-name gespeichert sind, genauso referenziert werden wie Eigenschaften in application.yml
Und der gleiche Prozess gilt für Geheimnisse:
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.ymal ist die erste Datei, die beim Starten der Spring-Boot-Anwendung geladen wird, und application.property wird beim Starten der Anwendung geladen. Sie behalten also möglicherweise die Anmeldeinformationen Ihres Konfigurationsservers usw. in bootstrap.ymal, die beim Laden der Anwendung erforderlich sind, und in application.properties, die Sie behalten, möglicherweise die Datenbank-URL usw.
bootstrap.yml
ist soweit ich sehen kann spezifisch für [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )) und es ist die Konfiguration, die verwendet wird, um die richtige Konfiguration zu finden. Also Konfiguration dort wird wahrscheinlich vor application.properties/yaml