2014-11-11 14 views
5

Ich versuche, eine externe Eigenschaftendatei in meine Spring-Boot-App zu laden. ursprünglich habe ich @PropertySource in der Config-Klasse verwendet. aber jetzt möchte ich diese Annotation entfernen, damit die Klasse nicht vom Ort abhängig ist. so habe ich versucht, zu verwenden:Spring Boot externe Konfiguration

java -jar my-boot-ws.war --SPRING_CONFIG_NAME=file:///Users/TMP/resources/ 

basierend auf dieser http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html Dokumentation, aber ich erhalte die folgenden Fehler:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 

mit der Anmerkung funktioniert gut, aber ich würde wirklich davon weg bewegen mag. jede mögliche Hilfe auf diesem würde großer

Dank

****** KORREKTUR *******

Leider kopieren und einfügen Fehler sein der obige Befehl eigentlich sein sollte:

java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/ 

Ich versuche nicht, den Namen der Konfigurationsdatei zu ändern, fügen Sie einfach einen zusätzlichen Speicherort hinzu. Wie hier erklärt:

If spring.config.location contains directories (as opposed to files) they should end in/(and will be appended with the names generated from spring.config.name before being loaded).

Ich interpretierte dies als zu sagen, dass die Datei $ {} spring.application.name .properties vom --spring.config.location in der Befehlszeile übergeben geladen werden würde

Antwort

15

Nach etwas mehr Googeling I diese Spring Boot and multiple external configuration files anzeigt, dass die folgende ist die richtige Verwendung gefunden:

java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/myFile.properties 

Ich habe den Eindruck, dass die --spring.config.location andere Eigenschaften Dateien angegeben im Verzeichnis laden würde. Laut der Post an der von mir erwähnten Verbindung ist dies nicht der Fall. basierend auf der Verknüpfung, wenn das Verzeichnis angegeben ist, wird dort nach der Datei application.properties gesucht. aber wieder scheint die Dokumentation hier http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html zu unterstellen, dass die Spring-Boot-App zuerst auf den Klassenpfad schauen wird und, falls verfügbar, den Namen der App abrufen, um zusätzliche Eigenschaftendateien basierend auf diesem Namen zu erhalten.

aber sobald ich einen Dateinamen angegeben hat alles gut funktioniert, so denke ich, ich habe mich geirrt.

+0

Hallo, ich bin mit der gleichen Situation konfrontiert, wo verschiedene Property-Dateien unter Ordner & Unterordner befinden. Ich weiß nicht, wie man alle diese Eigenschaftendateien von diesen Ordnern erhält/lädt. Wie kann ich nur die Ordnerpfade angeben, damit alle Eigenschaftendateien geladen werden? – Sanjeev

6

In Befehlszeile sollten Sie unter Eigenschaft verwenden, um eine zusätzliche Boot-Konfigurationsdatei zu erwähnen:

--spring.config.location="file:/path/to/application.properties" 

eine Alternative wäre:

-Dspring.config.location="file:/path/to/application.properties" 

Beachten Sie, dass die Zeichen Kleinbuchstaben sind und das Worttrennzeichen eine Periode ist..

Ansonsten können Sie eine Umgebungsvariable mit Schlüssel verwenden, verwendet Sie schon:

  • In einem * nix-System:

    export SPRING_CONFIG_NAME=file:/path/to/application.properties 
    
  • In Windows OS:

    set SPRING_CONFIG_NAME=file:/path/to/application.properties 
    
+0

Ich korrigierte meine Aussage oben, der Name ist nicht das, was ich ändern wollte. Ich wollte einen Standort hinzufügen. – peekay

+0

Sie haben eine Frage gestellt, weil sie einen falschen Systemeigenschaftsnamen verwendet hat. Erneut meine Antwort überprüfen und wenn es für Sie richtig aussieht, bitte akzeptieren oder upvote :) – tmarwen

+0

Ihre Antwort ist technisch korrekt und verdient eine Abstimmung, aber beantwortet nicht die beabsichtigte Frage. Ich entschuldige mich dafür, dass der Kopier-/Einfügefehler irreführend ist. – peekay

3

Es ist vielleicht kein häufiges Problem, aber ich habe es gesehen. Sie müssen auch eine application.properties in Ihrem Klassenpfad haben, auch wenn Sie es durch --spring.config.name ersetzen (ich hatte meine in Gitignore aufgrund sensibler Informationen).

+0

kann ich nicht glauben, dass ich meine 3 Stunden für diesen Schwachsinn ausgegeben habe. Ich habe diese Art von Unsinn seit Jahren nicht mehr gesehen. Danke. – jit

Verwandte Themen