Spring boot externe Konfiguration der Eigenschaftendatei

8

Ich habe eine Spring-Boot-Anwendung, die ich in einem Krieg verpacken kann, den ich in verschiedenen Umgebungen bereitstellen möchte. Um diese Bereitstellung zu automatisieren, ist es einfacher, die Konfigurationsdatei extern zu lassen.

Momentan funktioniert alles mit einer Datei application.properties in src / main / resources. Dann benutze ich 'amvn install', um einen Krieg aufzubauen, der für Tomcat verfügbar ist. Aber ich würde gerne eine .yml-Datei verwenden, die nicht auf mvn install vorhanden sein muss, aber während der Bereitstellung des Krieges gelesen werden würde und sich im selben oder einem Verzeichnis in Bezug auf meinen Krieg befindet.

24 . Externalisierte Konfiguration zeigt an, wo Spring Boot nach Dateien sucht und 72.3 Ändern Sie den Speicherort der externen Eigenschaften einer Anwendung gibt mehr Details darüber, wie dies zu konfigurieren, aber ich verstehe nur nicht, wie dies übersetzt werden soll mein Code.

Meine Anwendungsklasse sieht so aus:     Paket be.ugent.lca;

%Vor%

Muss ich eine @PropertySource zu dieser Datei hinzufügen? Wie würde ich auf einen bestimmten relativen Pfad verweisen?

Ich habe das Gefühl, dass es dort wahrscheinlich als die meisten Spring-Boot-Dokumentationen dokumentiert ist, aber ich verstehe einfach nicht, wie sie mich dazu bringen.

BEARBEITEN

Ich bin mir nicht sicher, ob das ein separates Problem sein sollte, aber ich denke, es ist immer noch etwas anderes.
Nach dem Setzen der os-Variable ging der Fehler der nicht gefundenen Yaml-Datei verloren. Trotzdem erhalte ich immer noch den gleichen Fehler wie wenn ich keine .properties oder .yml Datei hatte. Die Anwendung sieht jetzt so aus:

%Vor%

Die Betriebssystemvariable application_home

%Vor%

Meine application.yml-Datei (Teil, über die sie sich beschwert):

%Vor%

Fehler bei java -jar * .war Alle Variationen auf:

%Vor%     
turoni 25.03.2017, 18:47
quelle

3 Antworten

9
___ qstnhdr ___ Spring boot externe Konfiguration der Eigenschaftendatei ___ answer43021189 ___

Ja, Sie müssen @PropertySource wie unten gezeigt verwenden.

Der wichtige Punkt hier ist, dass Sie die Eigenschaft application.yml (oder wählen Sie einen anderen Namen) als Betriebssystemumgebungsvariable oder Systemeigenschaft angeben müssen oder beim Start als Befehlszeilenargument übergeben werden können Spring Boot. Diese Eigenschaft gibt an, wo sich die Konfigurationsdatei ( spring.config.location oder application-external.yml ) genau befindet (Beispiel: -Dspring.config.location=file:${home}/conf/application-external.yml etc ..)

%Vor%     
___ tag123springboot ___ Spring Boot erleichtert die Erstellung von Spring-basierten Anwendungen und Services in Produktionsqualität mit minimalem Aufwand. Es benötigt eine rechtmeinende Sicht auf die Spring-Plattform, damit neue und bestehende Benutzer schnell zu den benötigten Bits gelangen. ___ antwort43317188 ___

Verwenden von Dateien mit externen Eigenschaften

Die Antwort liegt in der Spring Boot Docs, ich werde versuchen, es für Sie zu brechen.

Als erstes sollten Sie nicht @ConfigurationProperties verwenden, wenn Sie mit der Yaml-Konfiguration arbeiten, wie hier unter Yaml-Mängel :

  

YAML-Dateien können nicht über die Annotation @PropertySource geladen werden. Für den Fall, dass Sie die Werte auf diese Weise laden müssen, müssen Sie eine Eigenschaftendatei verwenden.

Also, wie man Property-Dateien lädt? Das wird hier erklärt Anwendungseigenschaftsdateien

Eins ist für dich geladen: -ea -Dspring.config.location=file:${home}/conf/application-external.yml , lege es in eines der Verzeichnisse, wie im obigen Link erwähnt. Das ist großartig für Ihre allgemeine Konfiguration.

Jetzt für Ihre Umgebung spezifische Konfiguration (und Sachen wie Kennwörter), die Sie externe Eigenschaftendateien verwenden möchten, wie man das tut, wird auch in diesem Abschnitt erklärt:

  

Wenn Sie application.properties nicht als Namen der Konfigurationsdatei verwenden möchten, können Sie zu einem anderen wechseln, indem Sie eine Umgebungseigenschaft spring.config.name angeben. Sie können auch mithilfe der Umgebungseigenschaft spring.config.location (durch Kommas getrennte Liste von Verzeichnispositionen oder Dateipfaden) auf einen expliziten Speicherort verweisen.

Sie verwenden also die %code% -Umgebungseigenschaft. Stellen Sie sich vor, Sie haben eine externe Konfigurationsdatei: %code% im conf / dir unter Ihrem Home-Verzeichnis, fügen Sie es einfach so hinzu: %code% als Startparameter Ihrer JVM. Wenn Sie mehrere Dateien haben, trennen Sie sie einfach mit einem Komma. Beachten Sie, dass Sie externe Eigenschaften wie diese problemlos verwenden können, um Eigenschaften zu überschreiben und nicht nur hinzuzufügen.

Ich würde empfehlen, dies zu testen, indem Sie Ihre Anwendung nur mit Ihrer internen application.yml-Datei arbeiten lassen und dann eine (Test-) Eigenschaft in Ihrer externen Eigenschaftendatei überschreiben und den Wert irgendwo notieren.

Bindet Yaml-Eigenschaften an Objekte

Wenn ich mit Yaml-Eigenschaften arbeite, lade ich sie normalerweise mit %code% , was beim Arbeiten mit Beispiellisten oder einer komplexeren Eigenschaftsstruktur großartig ist. (Aus diesem Grund sollten Sie Yaml-Eigenschaften verwenden, für einfache Eigenschaften können Sie vielleicht eher normale Eigenschaftendateien verwenden). Lesen Sie dies für weitere Informationen: Eigenschaften der typsicheren Konfiguration

Extra: Laden dieser Eigenschaften in IntelliJ-, Maven- und JUnit-Tests

Manchmal möchten Sie diese Eigenschaften in Ihren Maven-Builds oder bei Tests laden. Oder nur für die lokale Entwicklung mit Ihrer IDE

Wenn Sie IntelliJ für die Entwicklung verwenden, können Sie dies leicht hinzufügen, indem Sie es zu Ihrer Tomcat-Ausführungskonfiguration hinzufügen: "Ausführen" - & gt; "Edit Configurations", wählen Sie Ihre Laufkonfiguration unter "Tomcat Server", überprüfen Sie die Registerkarte Server und fügen Sie sie unter "VM Options" hinzu.

Um externe Konfigurationsdateien in Ihrem Maven Build zu verwenden: Konfigurieren Sie das maven todsichere Plugin wie folgt in Ihrer pom.xml:

%Vor%

Beim Ausführen von JUnit-Tests in IntelliJ:

  • Ausführen → Konfigurationen bearbeiten
  • Voreinstellungen → JUnit
  • VM-Optionen hinzufügen - & gt; %Code%
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ qstntxt ___

Ich habe eine Spring-Boot-Anwendung, die ich in einem Krieg verpacken kann, den ich in verschiedenen Umgebungen bereitstellen möchte. Um diese Bereitstellung zu automatisieren, ist es einfacher, die Konfigurationsdatei extern zu lassen.

Momentan funktioniert alles mit einer Datei application.properties in src / main / resources. Dann benutze ich 'amvn install', um einen Krieg aufzubauen, der für Tomcat verfügbar ist. Aber ich würde gerne eine .yml-Datei verwenden, die nicht auf mvn install vorhanden sein muss, aber während der Bereitstellung des Krieges gelesen werden würde und sich im selben oder einem Verzeichnis in Bezug auf meinen Krieg befindet.

24 . Externalisierte Konfiguration zeigt an, wo Spring Boot nach Dateien sucht und 72.3 Ändern Sie den Speicherort der externen Eigenschaften einer Anwendung gibt mehr Details darüber, wie dies zu konfigurieren, aber ich verstehe nur nicht, wie dies übersetzt werden soll mein Code.

Meine Anwendungsklasse sieht so aus:     Paket be.ugent.lca;

%Vor%

Muss ich eine @PropertySource zu dieser Datei hinzufügen? Wie würde ich auf einen bestimmten relativen Pfad verweisen?

Ich habe das Gefühl, dass es dort wahrscheinlich als die meisten Spring-Boot-Dokumentationen dokumentiert ist, aber ich verstehe einfach nicht, wie sie mich dazu bringen.

BEARBEITEN

Ich bin mir nicht sicher, ob das ein separates Problem sein sollte, aber ich denke, es ist immer noch etwas anderes.
Nach dem Setzen der os-Variable ging der Fehler der nicht gefundenen Yaml-Datei verloren. Trotzdem erhalte ich immer noch den gleichen Fehler wie wenn ich keine .properties oder .yml Datei hatte. Die Anwendung sieht jetzt so aus:

%Vor%

Die Betriebssystemvariable application_home

%Vor%

Meine application.yml-Datei (Teil, über die sie sich beschwert):

%Vor%

Fehler bei java -jar * .war Alle Variationen auf:

%Vor%     
___ answer49229953 ___

Verwenden Sie den folgenden Code in Ihrer Boot-Klasse:

%Vor%

Verwenden Sie den folgenden Code in Ihrem Controller:

%Vor%     
___
loïc 10.04.2017, 07:29
quelle
3

Ja, Sie müssen @PropertySource wie unten gezeigt verwenden.

Der wichtige Punkt hier ist, dass Sie die Eigenschaft application_home (oder wählen Sie einen anderen Namen) als Betriebssystemumgebungsvariable oder Systemeigenschaft angeben müssen oder beim Start als Befehlszeilenargument übergeben werden können Spring Boot. Diese Eigenschaft gibt an, wo sich die Konfigurationsdatei ( .properties oder .yaml ) genau befindet (Beispiel: /usr/local/my_project/ etc ..)

%Vor%     
developer 25.03.2017 19:49
quelle
-1

Verwenden Sie den folgenden Code in Ihrer Boot-Klasse:

%Vor%

Verwenden Sie den folgenden Code in Ihrem Controller:

%Vor%     
vinoth Kumar 12.03.2018 07:19
quelle

Tags und Links