Spring Properties File Outside jar

1. Oversikt

Eiendomsfiler er en vanlig metode som vi kan bruke til å lagre prosjektspesifikk informasjon. Ideelt sett bør vi holde den utenfor emballasjen for å kunne gjøre endringer i konfigurasjonen etter behov.

I denne raske opplæringen vil vi se på forskjellige måter å laste eiendomsfilen fra et sted utenfor glasset i en Spring Boot-applikasjon.

2. Bruke standardplasseringen

Etter konvensjon ser Spring Boot etter en eksternalisert konfigurasjonsfil - applikasjon . eiendommer eller application.yml - på 4 forhåndsbestemte steder i følgende prioritetsrekkefølge:

  • EN / config underkatalog for gjeldende katalog
  • Gjeldende katalog
  • En klassesti / config pakke
  • Klassestien rot

Derfor, en eiendom definert i application.properties og plassert i / config underkatalogen til den nåværende katalogen lastes inn. Dette vil også overstyre eiendommer andre steder i tilfelle en kollisjon.

3. Bruke kommandolinjen

Hvis konvensjonen ovenfor ikke fungerer for oss, kan vi også konfigurer plasseringen direkte på kommandolinjen:

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

Vi kan også passere en mappeplassering der applikasjonen vil søke etter filen:

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

Og en alternativ tilnærming er å kjøre Spring Boot-applikasjonen gjennom Maven-pluginet. Der kan vi bruke en -D parameter:

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

4. Bruke miljøvariabler

Eller la oss si at vi ikke kan endre oppstartskommandoen. Det som er flott er Spring Boot vil også lese miljøvariablene SPRING_CONFIG_NAME og SPRING_CONFIG_LOCATION:

eksporter SPRING_CONFIG_NAME = applikasjon, jdbc eksporter SPRING_CONFIG_LOCATION = fil: /// Brukere / hjem / konfigurer java -jar app.jar

Merk at standardfilen fortsatt vil lastes inn. Men i tilfelle en eiendomskollisjon, den miljøspesifikke eiendomsfilen har forrang.

5. Programmatisk

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

offentlig PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer () {PropertySourcesPlaceholderConfigurer egenskaper = ny PropertySourcesPlaceholderConfigurer (); properties.setLocation (ny FileSystemResource ("/ Brukere / hjem / conf.properties")); properties.setIgnoreResourceNotFound (false); returegenskaper; }

Her har vi brukt PropertySourcesPlaceholderConfigurer for å laste eiendommene fra et tilpasset sted.

6. Ekskluderer en fil fra Fat Jar

Maven Boot-plugin vil automatisk inkludere alle filene i src / main / resources katalog til krukkepakken.

Hvis vi ikke vil at en fil skal være en del av glasset, kan vi utføre en enkel konfigurasjon for å ekskludere den:

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

I dette eksemplet har vi filtrert ut conf.properties filen blir inkludert i den resulterende krukken.

7. Konklusjon

Som vi kan se, tar Spring Boot-rammeverket seg av ekstern konfigurasjon for oss.

Ofte må vi bare plassere eiendomsverdiene i riktige filer og steder, men vi kan også bruke Spring's Java API for mer kontroll.

Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found