Spring Boot 1.X und Spring Boot 2.X bieten nicht die gleichen Optionen und Verhaltensweisen für das Externalized Configuration .
Die sehr gute Antwort von M. Deinum bezieht sich auf die Besonderheiten von Spring Boot 1.
Ich werde hier für Spring Boot 2 aktualisieren.
Quellen und Reihenfolge der Umgebungseigenschaften
Spring Boot 2 verwendet eine ganz bestimmte PropertySourceReihenfolge, die ein sinnvolles Überschreiben von Werten ermöglicht. Eigenschaften werden in der folgenden Reihenfolge berücksichtigt:
Eigenschaften der globalen Einstellungen von Devtools in Ihrem Home-Verzeichnis (~ / .spring-boot-devtools.properties, wenn devtools aktiv ist).
@TestPropertySource Anmerkungen zu Ihren Tests.
@SpringBootTest#propertiesAnmerkungsattribut für Ihre Tests. Kommandozeilenargumente.
Eigenschaften von SPRING_APPLICATION_JSON(Inline-JSON, eingebettet in eine Umgebungsvariable oder Systemeigenschaft).
ServletConfig Init-Parameter.
ServletContext Init-Parameter.
JNDI-Attribute von java:comp/env.
Java-Systemeigenschaften ( System.getProperties()).
Betriebssystemumgebungsvariablen.
A RandomValuePropertySource, das Eigenschaften nur zufällig hat. *.
Profilspezifische Anwendungseigenschaften außerhalb Ihres verpackten Glases ( application-{profile}.propertiesund YAML-Varianten).
Profilspezifische Anwendungseigenschaften, die in Ihrem Glas enthalten sind ( application-{profile}.propertiesund YAML-Varianten).
Anwendungseigenschaften außerhalb Ihres verpackten Glases ( application.propertiesund YAML-Varianten).
Anwendungseigenschaften in Ihrem Glas ( application.propertiesund YAML-Varianten).
@PropertySourceAnmerkungen zu Ihren @ConfigurationKlassen. Standardeigenschaften (durch Einstellung festgelegt
SpringApplication.setDefaultProperties).
Um externe Eigenschaftendateien anzugeben, sollten Sie folgende Optionen interessieren:
Profilspezifische Anwendungseigenschaften außerhalb Ihres verpackten Glases ( application-{profile}.propertiesund YAML-Varianten).
Anwendungseigenschaften außerhalb Ihres verpackten Glases ( application.propertiesund YAML-Varianten).
@PropertySourceAnmerkungen zu Ihren @ConfigurationKlassen. Standardeigenschaften (durch Einstellung festgelegt
SpringApplication.setDefaultProperties).
Sie können nur eine dieser 3 Optionen verwenden oder sie gemäß Ihren Anforderungen kombinieren.
In sehr einfachen Fällen reicht es beispielsweise aus, nur profilspezifische Eigenschaften zu verwenden. In anderen Fällen möchten Sie möglicherweise sowohl profilspezifische Eigenschaften als auch Standardeigenschaften und verwenden@PropertySource .
Standardspeicherorte für application.properties-Dateien
Bei application.propertiesDateien (und Varianten) lädt Spring sie standardmäßig in der folgenden Reihenfolge und fügt ihre Eigenschaften in der Umgebung hinzu:
Die höheren Prioritäten sind so wörtlich :
classpath:/,classpath:/config/,file:./,file:./config/.
Wie verwende ich Eigenschaftendateien mit bestimmten Namen?
Die Standardspeicherorte reichen nicht immer aus: Die Standardspeicherorte wie der Standarddateiname ( application.properties) passen möglicherweise nicht. Außerdem müssen Sie wie in der OP-Frage möglicherweise mehrere andere Konfigurationsdateien als application.properties(und die Variante) angeben .
Also spring.config.namewird nicht genug sein.
In diesem Fall sollten Sie mithilfe der spring.config.locationUmgebungseigenschaft (eine durch Kommas getrennte Liste von Verzeichnispositionen oder Dateipfaden) einen expliziten Speicherort angeben.
Um frei über das Dateinamenmuster zu sein, bevorzugen Sie die Liste der Dateipfade gegenüber der Liste der Verzeichnisse.
Zum Beispiel so:
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
Auf diese Weise ist es am ausführlichsten, nur den Ordner anzugeben, aber es ist auch die Möglichkeit, unsere Konfigurationsdateien sehr genau anzugeben und die effektiv verwendeten Eigenschaften klar zu dokumentieren.
spring.config.location ersetzt jetzt Standardspeicherorte, anstatt sie hinzuzufügen
Bei Spring Boot 1 spring.config.locationfügt das Argument bestimmte Speicherorte in der Spring-Umgebung hinzu.
Ab Spring Boot 2 werden jedoch spring.config.locationdie von Spring verwendeten Standardspeicherorte durch die angegebenen Speicherorte in der Spring-Umgebung ersetzt, wie in der Dokumentation angegeben .
Wenn benutzerdefinierte Konfigurationsspeicherorte mithilfe von konfiguriert werden
spring.config.location, ersetzen sie die Standardspeicherorte. Wenn beispielsweise spring.config.locationmit dem Wert konfiguriert
ist classpath:/custom-config/, file:./custom-config/wird die Suchreihenfolge der folgenden:
file:./custom-config/
classpath:custom-config/
spring.config.locationAuf diese Weise können Sie jetzt sicherstellen, dass eine application.propertiesDatei explizit angegeben werden muss.
Für über JARs, die keine application.propertiesDateien verpacken sollen, ist das ziemlich nett.
Um das alte Verhalten bei der spring.config.locationVerwendung von Spring Boot 2 beizubehalten, können Sie die neue spring.config.additional-locationEigenschaft verwenden. Stattdessen werden spring.config.locationweiterhin die in der Dokumentation angegebenen Speicherorte hinzugefügt :
Wenn benutzerdefinierte Konfigurationsspeicherorte mithilfe von konfiguriert werden spring.config.additional-location, werden sie alternativ
zusätzlich zu den Standardspeicherorten verwendet.
In der Praxis
Angenommen, Sie haben wie in der OP-Frage 2 externe Eigenschaftendateien anzugeben und 1 Eigenschaftendatei im Uber-JAR.
So verwenden Sie nur die von Ihnen angegebenen Konfigurationsdateien:
-Dspring.config.location=classpath:/job1.properties,classpath:/job2.properties,classpath:/applications.properties
So fügen Sie diesen an den Standardspeicherorten Konfigurationsdateien hinzu:
-Dspring.config.additional-location=classpath:/job1.properties,classpath:/job2.properties
classpath:/applications.properties ist im letzten Beispiel nicht erforderlich, da die Standardspeicherorte dies haben und die Standardspeicherorte hier nicht überschrieben, sondern erweitert werden.
application.propertieswird immer geladen, wobeispring.config.locationSie zusätzliche Konfigurationsspeicherorte hinzufügen können, die auf Dateien überprüft werden (dh wenn es mit a endet/). Wenn Sie dort jedoch eine durch Kommas getrennte Liste einfügen, die auf Dateien verweist, die geladen werden. Dies wird auch im Spring Boot Referenzhandbuch hier erklärt