Was ist der Unterschied zwischen dem Einfügen einer Eigenschaft in application.yml oder bootstrap.yml im Frühjahrsstart?

250

Was ist der Unterschied zwischen dem Einfügen einer Eigenschaft in application.yml oder bootstrap.yml im Frühjahrsstart? Im Fall logging.config funktioniert die Anwendung anders.

Rys
quelle
14
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
zapl

Antworten:

295

Ich habe gerade die Spring CloudJungs gefragt und dachte, ich sollte die Informationen, die ich hier habe, teilen.

bootstrap.ymlwird vorher geladen application.yml.

Es wird normalerweise für Folgendes verwendet:

  • Wenn Sie Spring Cloud Config Server verwenden, sollten Sie angeben spring.application.nameund spring.cloud.config.server.git.uriinnerhalbbootstrap.yml
  • einige encryption/decryptionInformationen

Technisch bootstrap.ymlwird von einer übergeordneten Feder geladen ApplicationContext. Dieses übergeordnete ApplicationContextElement wird vor dem verwendeten geladen application.yml.

Michael Isvy
quelle
6
Könnten Sie bitte erklären, warum Config Server diese Parameter eingeben muss bootstrap.yml?
Neo
30
Bei Verwendung von Spring Cloud werden die "echten" Konfigurationsdaten normalerweise von einem Server geladen. Um die URL (und andere Verbindungskonfigurationen wie Kennwörter usw.) abzurufen, benötigen Sie eine frühere oder "Bootstrap" -Konfiguration. Daher fügen Sie die Konfigurationsserverattribute in die Datei bootstrap.yml ein, mit der die tatsächlichen Konfigurationsdaten geladen werden (die im Allgemeinen überschreiben, was in einer application.yml enthalten ist [falls vorhanden]).
Mike Mansell
10
Manchmal frage ich mich, wann der Frühling neue aufregende Funktionen mit sich bringt, die die Konvention über die Spezifikation hinaus hinterlässt, oder ob sie die bereits Konvention annehmen und nichts muss nicht spezifiziert werden, und alles wird von selbst gelöst, wenn nicht bis zum Frühjahr, dann wird der Frühlingsstiefel und möglicherweise im zukünftigen Frühling. boot-boot;)
Saurabh
Wenn Sie sagen, dass bootstrap.yml vor application.yml geladen wird. Aber wenn ich application.yml entferne. Meine Anwendung liest nicht bootstrap.yml. Warum ist das so?
Jesse
Wir müssen hervorheben, dass die Bootstrap-Datei niemals überschrieben wird, da sie mehr Vorrang hat. Laut der Dokumentation Team's Spring
Kelgwiin
84

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.ymloder 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:

  • Speicherort des Konfigurationsservers (spring.cloud.config.uri )
  • Name der Anwendung ( 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.

Dustin.schultz
quelle
34

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

  1. Bei Verwendung mit dem Spring Cloud Config-Server müssen Sie den Anwendungsnamen und den Konfigurations-Git-Speicherort mithilfe der folgenden Eigenschaften angeben.
spring.application.name: "Anwendungsname"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. Bei Verwendung mit Microservices (außer Cloud-Konfigurationsserver) müssen wir den Anwendungsnamen und den Speicherort des Konfigurationsservers mithilfe der folgenden Eigenschaften angeben
spring.application.name: 
spring.cloud.config.uri: 
  1. Diese Eigenschaftendatei kann andere Konfigurationen enthalten, die für die Spring Cloud-Umgebung relevant sind, z. B. den Standort des Eureka-Servers sowie Eigenschaften im Zusammenhang mit Verschlüsselung / Entschlüsselung.

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

Vaibhav Sharma
quelle
5

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

Dixit Gangaiah
quelle
4

Nun, ich stimme voll und ganz den Antworten zu, die in diesem Punkt bereits existieren:

  • bootstrap.ymlwird 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.ymltun ist. Aber achten Sie auf diese knifflige Sache:

  • Wenn Sie Eigenschaften in platzieren 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:

  • Eigenschaften, die während der Bootstrap-Phase geladen werden. Wir verwenden 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 .
  • Eigenschaften, die in der 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.ymloder bootstrap.ymlim Frühjahrsstiefel sind also:

  • Eigenschaften zum Laden von Konfigurationsdateien in der Bootstrap-Phase können nur in platziert werden bootstrap.yml.
  • Platzieren Sie alle anderen Arten von Eigenschaften mit application.ymlhöherer Priorität.
Lebecca
quelle
3

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. bootstrap.yml lädt die erste

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.

Sudip Bhandari
quelle
1

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
Jack Beaken
quelle
0

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.

Anwar Sir
quelle