Du betrachtest gerade Konfiguration für deine Spring Applikation
Frühlingsbild von Aaron Burden auf Unsplash

Konfiguration für deine Spring Applikation

Wer für unterschiedliche Umgebungen eine Spring Anwendung entwickelt, kennt am Anfang das typische Problem. Wie bekommt meine Spring Spring Boot Applikation die Werte für Datenbank und anderes übergeben. Wie kann ich auch mehrere Konfigurationsdateien für Spring verwenden? Dafür bietet Spring mehrere Varianten und Lösungen. Ich zeig dir hier schnelle Möglichkeiten der Konfiguration für deine Spring Applikation. Natürlich auch verwendbar für Spring Boot.

Kommandozeile

Zum einen könnt ihr dies beim Starten der Applikation per Kommandozeilenparameter machen

java -jar my-application.jar --my.setting=my.value

Meist werdet ihr das über eine Konfigurationsdatei, Properties File, machen. In der Regel heißt diese z.B. application.properties. Manchmal auch application.yaml. Grundsätzlich kann diese frei benannt werden. Die Konfiguration wird dann selbst im JSON oder YAML Format eingetragen.

Auch diese könnt ihr extern, über Kommandozeilenparameter, angeben.

java -jar -Dspring.config.location=path/to/my/application.properties my-application.jar 

Übergabe per Annotation

Es ist aber auch möglich die Konfigurationsdatei für Spring direkt im Code an der Konfigurationsklasse, die per @Configuration Annotation eingeleitet wird, einzubinden. Hierfür wird die Annotation @PropertySource verwendet.

@PropertySource(value ="classpath:application.properties")

@PropertSource kann auch den Parameter ignoreResourceNotFound=true bekommen. Default ist diese automatisch false. Aber vielleicht wollt ihr eure Parameter je nach Szenario auch nach einen der anderen Methoden setzen. Mit

@PropertySource(value ="classpath:application.properties", ignoreResourceNotFound=true)

wird er das Fehlen der application.properties nicht beim Programmstart mit einer Exception quittieren.

Mehrere Konfigurationsdateien für deine Spring Applikation

Manchmal existieren für verschiedene Umgebungen auch verschiedene Konfigurationsdateien. So wollt ihr für eure Umgebungen andere Konfigurationsdateien verwenden oder aber ihr lagert Teile der Konfiguration in verschiedene Dateien aus. Zum Beispiel wenn ihr die Datenbank Konfiguration von anderen trennen wollt.

Spring bietet mit @PropertySources eine Annotation um mehrere @PropertySource zu sammeln. Das sieht dann so aus:

@PropertySources( value = {
         @PropertySource(value ="classpath:default_application.properties", ignoreResourceNotFound=true),
        @PropertySource(value ="file:/opt/DIR/db_application.properties", ignoreResourceNotFound=true ),
        @PropertySource(value ="file:C:/Users/USERNAME/web_application.properties", ignoreResourceNotFound=true )
})

Variable/Property mehrfach angegeben

Die Reihenfolge der Angaben hat auch eine Bedeutung. Diese werden von der Reihenfolge der Angabe eingelesen. Bei mehreren Konfigurationsdateien kann es vorkommen, dass ihr eine Einstellung mehrfach angegeben hat. Spring verwendet dann die, die zuletzt angeben wurde. So dass ihr auch mit dem Überschreiben der Konfiguration, je nach Umgebung, auch spielen könnt. So könnt ihr z.B. an erster Selle eine default application.properties angeben um gewissen Standardeinstellungen zu setzen, die dann je nach Umgebung überschrieben werden.

Beispiel

@Configuration@PropertySources( value = {
         @PropertySource(value ="classpath:application.properties", ignoreResourceNotFound=true),
        @PropertySource(value ="file:/opt/dTale/flow_service_application.properties", ignoreResourceNotFound=true ),
        @PropertySource(value ="file:C:/Users/mburbach/flow_service_application.properties", ignoreResourceNotFound=true )
})
public class AppConfig {

	@Autowired
	private transient Environment environment;

	@Bean
	public String getMySetting() {
	    return this.environment.getProperty("my.setting");
	}
}

Das soll es für den schnellen Überblick erstmal gewesen sein. Happy Coding.

Referenzen:

Spring @PropertySources

Schreibe einen Kommentar