Spring Properties File Außerhalb des Glases

1. Übersicht

Eigenschaftendateien sind eine gängige Methode, mit der wir projektspezifische Informationen speichern können. Im Idealfall sollten wir es außerhalb der Verpackung aufbewahren, um bei Bedarf Änderungen an der Konfiguration vornehmen zu können.

In diesem kurzen Tutorial werden verschiedene Möglichkeiten zum Laden der Eigenschaftendatei von einem Speicherort außerhalb des JAR in einer Spring Boot-Anwendung untersucht.

2. Verwenden des Standardspeicherorts

Gemäß der Konvention sucht Spring Boot nach einer externen Konfigurationsdatei - Anwendung. properties oder application.yml - an 4 vorgegebenen Stellen in der folgenden Rangfolge:

  • Ein / config- Unterverzeichnis des aktuellen Verzeichnisses
  • Das aktuelle Verzeichnis
  • A classpath / config - Paket
  • Die Klassenpfadwurzel

Daher wird eine in application.properties definierte Eigenschaft geladen, die im Unterverzeichnis / config des aktuellen Verzeichnisses abgelegt wird . Dadurch werden im Falle einer Kollision auch Eigenschaften an anderen Stellen überschrieben.

3. Verwenden der Befehlszeile

Wenn die obige Konvention für uns nicht funktioniert, können wir den Speicherort auch direkt in der Befehlszeile konfigurieren:

java -jar app.jar --spring.config.location=file:///Users/home/config/jdbc.properties

Wir können auch einen Ordner übergeben, in dem die Anwendung nach der Datei sucht:

java -jar app.jar --spring.config.name=application,jdbc --spring.config.location=file:///Users/home/config

Ein alternativer Ansatz besteht darin, die Spring Boot-Anwendung über das Maven-Plugin auszuführen. Dort können wir einen -D- Parameter verwenden:

mvn spring-boot:run -Dspring.config.location="file:///Users/home/jdbc.properties"

4. Umgebungsvariablen verwenden

Oder nehmen wir an, wir können den Startbefehl nicht ändern. Was großartig ist, ist, dass Spring Boot auch die Umgebungsvariablen SPRING_CONFIG_NAME und SPRING_CONFIG_LOCATION liest :

export SPRING_CONFIG_NAME=application,jdbc export SPRING_CONFIG_LOCATION=file:///Users/home/config java -jar app.jar

Beachten Sie, dass die Standarddatei weiterhin geladen wird. Im Falle einer Eigenschaftskollision hat die umgebungsspezifische Eigenschaftendatei jedoch Vorrang.

5. Programmatisch

Wenn wir einen programmgesteuerten Zugriff wünschen, können wir eine PropertySourcesPlaceholderConfigurer- Bean registrieren :

public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer(); properties.setLocation(new FileSystemResource("/Users/home/conf.properties")); properties.setIgnoreResourceNotFound(false); return properties; }

Hier haben wir PropertySourcesPlaceholderConfigurer verwendet , um die Eigenschaften von einem benutzerdefinierten Speicherort zu laden.

6. Ausschließen einer Datei aus dem Fat Jar

Das Maven Boot-Plugin fügt automatisch alle Dateien im Verzeichnis src / main / resources in das JAR-Paket ein.

Wenn wir nicht möchten, dass eine Datei Teil des JAR ist, können wir eine einfache Konfiguration verwenden, um sie auszuschließen:

   src/main/resources true  **/conf.properties    

In diesem Beispiel haben wir die Datei conf.properties herausgefiltert, damit sie nicht in das resultierende Glas aufgenommen wird.

7. Fazit

Wie wir sehen können, kümmert sich das Spring Boot Framework selbst um die externe Konfiguration.

Oft müssen wir nur die Eigenschaftswerte in den richtigen Dateien und Speicherorten platzieren, aber wir können auch die Java-API von Spring verwenden, um mehr Kontrolle zu erhalten.

Wie immer ist der vollständige Quellcode der Beispiele auf GitHub verfügbar.