Spring Properties File Udenfor krukke

1. Oversigt

Ejendomsfiler er en almindelig metode, som vi kan bruge til at gemme projektspecifik information. Ideelt set skal vi holde det eksternt for emballagen for at kunne foretage ændringer i konfigurationen efter behov.

I denne hurtige vejledning ser vi på forskellige måder at indlæse egenskabsfilen fra et sted uden for krukken i en Spring Boot-applikation.

2. Brug af standardplaceringen

Efter konvention ser Spring Boot efter en ekstern konfigurationsfil - Ansøgning . ejendomme eller ansøgning.yml - på 4 forudbestemte placeringer i følgende rækkefølge:

  • EN / config underkatalog til det aktuelle bibliotek
  • Den aktuelle mappe
  • En klassesti / config pakke
  • Klassestiens rod

Derfor, en ejendom defineret i application.properties og placeres i / config underkatalog for den aktuelle mappe indlæses. Dette tilsidesætter også egenskaber andre steder i tilfælde af kollision.

3. Brug af kommandolinjen

Hvis ovenstående konvention ikke virker for os, kan vi også konfigurer placeringen direkte i kommandolinjen:

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

Vi kan også passere en mappeplacering, hvor applikationen søger efter filen:

java -jar app.jar --spring.config.name = applikation, jdbc --spring.config.location = fil: /// Brugere / hjem / config

Og en alternativ tilgang kører Spring Boot-applikationen gennem Maven-pluginet. Der kan vi bruge en -D parameter:

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

4. Brug af miljøvariabler

Eller lad os sige, at vi ikke kan ændre opstartskommandoen. Hvad der er godt er Spring Boot læser også miljøvariablerne SPRING_CONFIG_NAME og SPRING_CONFIG_LOCATION:

eksporter SPRING_CONFIG_NAME = applikation, jdbc eksport SPRING_CONFIG_LOCATION = fil: /// Brugere / hjem / config java -jar app.jar

Bemærk, at standardfilen stadig indlæses. Men i tilfælde af en ejendomskollision, den miljøspecifikke ejendomsfil har forrang.

5. Programmatisk

Eller hvis vi ønsker programmatisk adgang, kan vi registrere en PropertySourcesPlaceholderConfigurer bønne:

public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer () {PropertySourcesPlaceholderConfigurer egenskaber = ny PropertySourcesPlaceholderConfigurer (); properties.setLocation (ny FileSystemResource ("/ Brugere / hjem / conf.properties")); egenskaber.setIgnoreResourceNotFound (false); returegenskaber; }

Her har vi brugt PropertySourcesPlaceholderConfigurer for at indlæse egenskaberne fra en brugerdefineret placering.

6. Ekskluderer en fil fra den fede krukke

Maven Boot-pluginet inkluderer automatisk alle filer i src / main / ressourcer mappe til krukkepakken.

Hvis vi ikke ønsker, at en fil skal være en del af krukken, kan vi en simpel konfiguration for at udelukke den:

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

I dette eksempel har vi filtreret ud konf. ejendomme fil fra at blive inkluderet i den resulterende krukke.

7. Konklusion

Som vi kan se, tager Spring Boot-rammen selv sig af ekstern konfiguration for os.

Ofte er vi bare nødt til at placere egenskabsværdierne i de korrekte filer og placeringer, men vi kan også bruge Spring's Java API til mere kontrol.

Som altid er den fulde kildekode for eksemplerne tilgængelig på GitHub.