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.