wake-up-neo.com

Was ist der Unterschied zwischen dem Versetzen einer Eigenschaft in application.yml oder bootstrap.yml in spring boot?

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.

188
Rys

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:

  • wenn Sie Spring Cloud Config Server verwenden, sollten Sie spring.application.name und spring.cloud.config.server.git.uri in bootstrap.yml angeben.
  • einige encryption/decryption Informationen

Technisch gesehen wird bootstrap.yml Von einem übergeordneten Spring ApplicationContext geladen. Das übergeordnete ApplicationContext wird vor demjenigen geladen, das application.yml Verwendet.

233
Michael Isvy

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:

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

68
dustin.schultz

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

  1. Bei Verwendung mit dem Spring Cloud Config-Server müssen Sie den Anwendungsnamen und den Konfigurations-Git-Speicherort unter Verwendung der folgenden Eigenschaften angeben.
 
 spring.application.name: "application-name" 
 spring.cloud.config.server.git.uri: "git-uri-config" 
 
  1. Bei Verwendung mit Microservices (außer Cloud-Konfigurationsserver) müssen Sie den Anwendungsnamen und den Speicherort des Konfigurationsservers unter Verwendung 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. Standort des Eureka-Servers, Verschlüsselungs-/Entschlüsselungsmerkmale.

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

14
Vaibhav Sharma

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

2
dixit gangaiah

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. bootstrap.yml loads the first

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.

2
Sudip Bhandari

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

  • Mit 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:

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

  • Eigenschaften, die während der bootstrap phase. Wir verwenden 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 .
  • Eigenschaften, die im 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:

  • Eigenschaften zum Laden von Konfigurationsdateien in bootstrap Phase kann nur in bootstrap.yml Abgelegt werden.
  • Wie bei allen anderen Arten von Eigenschaften, werden sie durch Platzieren in application.yml Vorrangig behandelt.
0
Lebecca