Was ist der Unterschied zwischen dem Versetzen einer Eigenschaft in application.yml oder bootstrap.yml in spring boot? In logging.config funktioniert die Anwendung anders.
Ich habe gerade die Spring Cloud
- Leute gefragt und dachte, ich sollte die Informationen teilen, die ich hier habe.
bootstrap.yml
Wird vor application.yml
Geladen.
Es wird normalerweise für Folgendes verwendet:
spring.application.name
und spring.cloud.config.server.git.uri
in bootstrap.yml
angeben.encryption/decryption
InformationenTechnisch gesehen wird bootstrap.yml
Von einem übergeordneten Spring ApplicationContext
geladen. Das übergeordnete ApplicationContext
wird vor demjenigen geladen, das application.yml
Verwendet.
bootstrap.yml
oder bootstrap.properties
Es wird nur verwendet/benötigt, wenn Sie Spring Cloud verwenden und die Konfiguration Ihrer Anwendung auf a gespeichert ist Remote-Konfigurationsserver (z. B. Spring Cloud Config Server).
Aus der Dokumentation:
Eine Spring Cloud-Anwendung erstellt einen "Bootstrap" -Kontext, der ein übergeordneter Kontext für die Hauptanwendung ist. Standardmäßig werden die Konfigurationseigenschaften aus externen Quellen geladen und die Eigenschaften entschlüsselt in den lokalen externen Konfigurationsdateien.
Notiere dass der bootstrap.yml
oder bootstrap.properties
kann zusätzliche Konfigurationen enthalten (z. B. Standardeinstellungen), aber im Allgemeinen müssen Sie hier nur bootstrap config) eingeben.
Normalerweise enthält es zwei Eigenschaften:
spring.cloud.config.uri
)spring.application.name
)Beim Start ruft Spring Cloud den Konfigurationsserver über HTTP mit dem Namen der Anwendung auf und ruft die Konfiguration dieser Anwendung zurück.
application.yml
oder application.properties
Enthält die Standardanwendungskonfiguration - normalerweise die Standardkonfiguration, da jede während des bootstrap Prozesses abgerufene Konfiguration die hier definierte Konfiguration überschreibt.
Diese Antwort wurde in Buch " Microservices Interview Questions, For Java Entwickler (Spring Boot, Spring Cloud, native Cloud-Anwendungen) " von sehr schön erklärt Munish Chandel, Version 1.30, 25.03.2018.
Der folgende Inhalt wurde diesem Buch entnommen, und die Gesamtgutschrift für diese Antwort geht an den Autor des Buches, d. H. Munish Chandel
application.yml
application.yml/application.properties Datei ist spezifisch für Spring Boot-Anwendungen. Sofern Sie den Speicherort der externen Eigenschaften einer Anwendung nicht ändern, lädt spring boot immer application.yml 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 an Ihre Anwendungsanforderungen anpassen. Beispieldatei ist unten gezeigt:
spring: application: name: foobar datenquelle: 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 dem application.yml geladen
bootstrap.yml wird nur benötigt, wenn Sie Spring Cloud verwenden und Ihre Microservice-Konfiguration auf einem entfernten Spring Cloud Config Server gespeichert ist.
Wichtige Punkte zu bootstrap.yml
spring.application.name: "application-name" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
Beim Start ruft Spring Cloud den Spring Cloud-Konfigurationsserver über HTTP (S) mit dem Namen der Anwendung auf und ruft die Konfiguration dieser Anwendung ab.
application.yml enthält die Standardkonfiguration für den Mikrodienst und jede Konfiguration, die (vom Cloud-Konfigurationsserver) während des bootstrap -Vorgangs abgerufen wird, überschreibt die in application.yml definierte Konfiguration
Nur meine 2 Cent hier ..
Mit Bootstrap.yml oder Bootstrap.properties wird die Konfiguration von Spring Cloud Server abgerufen.
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 mit http: // localhost: 8888 abzurufen, und es wird nach den Calculation-service.properties gesucht, die auf dem Spring Cloud Config-Server vorhanden sind
Sie können dasselbe aus den Protokollen von Calculation-Service validieren, wenn Sie es starten
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Bootstrap.yml wird verwendet, um die Konfiguration vom Server abzurufen. Dies kann für eine Spring Cloud-Anwendung oder für andere erfolgen. 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 zu lesen, die auf dem in der Run/Debug-Konfiguration angegebenen Spring-Profil basiert.
Wenn der Server nicht erreichbar ist, kann die Anwendung möglicherweise nicht weiterarbeiten. Wenn jedoch Konfigurationen, die mit dem Profil übereinstimmen, lokal vorhanden sind, werden die Serverkonfigurationen überschrieben.
Guter Ansatz:
Pflegen Sie ein separates Profil für local und führen Sie die App mit unterschiedlichen Profilen aus.
Nun, ich stimme voll und ganz den Antworten zu, die es in diesem Punkt bereits gibt:
bootstrap.yml
Werden Parameter gespeichert, die darauf hinweisen, wo sich die Remote-Konfiguration befindet, und mit dieser Remote-Konfiguration wird ein Bootstrap-Anwendungskontext erstellt.Tatsächlich ist es auch in der Lage, normale Eigenschaften genau so zu speichern, wie es application.yml
Tut. Aber achten Sie auf diese knifflige Sache:
bootstrap.yml
Platzieren, erhalten sie eine niedrigere Priorität als fast alle anderen Eigenschaftenquellen, einschließlich application.yml. Wie beschrieben hier .Lassen Sie uns klarstellen, dass es zwei Arten von Eigenschaften gibt, die mit bootstrap.yml
Zusammenhängen:
bootstrap.yml
), Um den Eigenschafteninhaber (ein Dateisystem, ein Git-Repository oder etwas anderes) und die Eigenschaften zu finden, die wir in diesem erhalten Weg sind mit hoher Priorität, so dass sie nicht durch lokale Konfiguration überschrieben werden können. Wie beschrieben hier .bootstrap.yml
Stehen. Wie bereits erläutert, erhalten sie eine niedrigere Priorität. Verwenden Sie diese, um die Standardeinstellungen festzulegen. Dies ist möglicherweise eine gute Idee.Die Unterschiede zwischen dem Setzen einer Eigenschaft auf application.yml
Oder bootstrap.yml
Im Frühjahrsstart sind:
bootstrap.yml
Abgelegt werden.application.yml
Vorrangig behandelt.