Egenskaper med Spring og Spring Boot

Egenskaper med Spring og Spring Boot

Oversikt

Denne veiledningen vil vise hvordan å sette opp og bruke egenskaper Våren via Java-konfigurasjon og @PropertySource.

Vi vil også se hvordan egenskaper arbeid i løpet av Våren Starte opp.

Videre lesing:

Våren Uttrykk Språk Guide

Denne artikkelen utforsker Våren Uttrykk Språk (SpEL), en kraftig uttrykk språk som støtter spørring og manipulere objektet grafer ved kjøring.,
Les mer →

Konfigurer et Våren Boot Web-Applikasjon

Noen av de mer nyttige configs for et Våren Starte opp programmet.
Les mer →

Guide til @ConfigurationProperties Våren Boot

– En rask og praktisk guide til @ConfigurationProperties merknad i Våren Starte opp.
Les mer →

Registrere et Egenskaper Fil via Kommentarer

Våren 3.1 presenterer også den nye @PropertySource kommentar som en praktisk ordning for å legge til eiendom kilder til miljøet.,

Vi kan bruke dette merknad i forbindelse med @Konfigurasjon merknad:

@Configuration@PropertySource("classpath:foo.properties")public class PropertiesWithJavaConfig { //...}

en Annen svært nyttig måte å registrere en ny eiendommer-fil ved hjelp av en plassholder, som gir oss muligheten til å dynamisk velg riktig fil på runtime:

@PropertySource({ "classpath:persistence-${envTarget:mysql}.properties"})...

2.1. Å definere Flere Eiendom Steder

@PropertySource kommentar gjentas i henhold til Java 8 konvensjoner., Derfor, hvis vi bruker Java 8 eller høyere, kan vi bruke dette merknad for å definere flere eiendel steder:

selvfølgelig, vi kan også bruke @PropertySources kommentar og angi en rekke @PropertySource. Dette fungerer i alle støttede Java-versjon, ikke bare i Java 8 eller høyere:

uansett, det er verdt å merke seg at i tilfelle av en eiendom navn kollisjon, den siste kilden les forrang.,

Bruker/Injisere Egenskaper

Injisere en eiendom med @Verdi kommentar er grei:

@Value( "${jdbc.url}" )private String jdbcUrl;

Vi kan også angi en standardverdi for eiendommen:

@Value( "${jdbc.url:aDefaultUrl}" )private String jdbcUrl;

Den nye PropertySourcesPlaceholderConfigurer lagt til Våren 3.1 løse ${…} plassholdere innen bean definisjon eiendom verdier og @Verdi kommentarer.,

til Slutt, vi kan få verdien av en eiendel ved hjelp av Miljøet API:

@Autowiredprivate Environment env;...dataSource.setUrl(env.getProperty("jdbc.url"));

Egenskaper Med vår Boot

Før vi går inn i mer avanserte konfigurasjonsmuligheter for egenskaper, la oss bruke litt tid på å se på den nye egenskaper støtte i løpet av Våren Starte opp.

Generelt sett, er dette ny støtte innebærer mindre konfigurasjon i forhold til standard Våren, som er selvfølgelig en av de viktigste mål av Bagasjerommet.

4.1. program.,egenskaper: Standard Property Fil

Boot gjelder dens typiske convention over configuration tilnærming til eiendom filer. Dette betyr at vi kan rett og slett sette et program.egenskaper-fil i vår src/main/katalog ressurser, og det vil bli automatisk oppdaget. Vi kan deretter injisere noen lagt egenskaper fra det som normalt.

Så, ved hjelp av denne standard fil, og vi slipper å måtte registrere en PropertySource eller selv gi en bane til en eiendom fil.,

Vi kan også konfigurere en annen fil ved kjøring hvis vi må, ved hjelp av et miljø eiendom:

java -jar app.jar --spring.config.location=classpath:/another-location.properties

Som av Våren Starte opp 2.3, kan vi også angi jokertegn steder for konfigurasjonsfiler.

For eksempel, kan vi sette våren.konfig.beliggenhet eiendommen til config/*/:

java -jar app.jar --spring.config.location=config/*/

Denne måten, Våren Boot vil se ut for konfigurasjon av filer matching config/*/ katalog mønster utenfor vår jar-filen. Dette kommer i hendig når vi har flere kilder av konfigurasjon egenskaper.

Siden versjon 2.4.,0, Våren Boot støtter bruk av multi-document properties-filer, på samme måte som YAML gjør ved design:

baeldung.customProperty=defaultValue#---baeldung.customProperty=overriddenValue

Merk at for egenskaper for filer, tre bindestreker notasjon er innledes med en kommentar-tegn (#).

4.2. Miljø-Spesifikke Egenskaper Fil

Hvis vi trenger å målrette ulike miljøer, det er en innebygd mekanisme for at det i Bagasjerommet.

Vi kan bare definere et program-miljø.egenskaper-fil i src/main/ressurser-katalogen, og deretter angi en Spring profil med det samme miljøet navn.,

For eksempel, hvis vi definerer en «staging» miljøet, det betyr at vi må definere et midlertidig profil og program-regi.eiendom.

Dette konv filen vil bli lastet inn i og vil ta presedens over standard eiendom-fil. Merk at standard-filen vil fortsatt være lagt, det er bare det at når det er en egenskap ved en kollisjon, miljø-eiendom-fil forrang.

4.3. Test-Spesifikke Egenskaper Fil

Vi kan også ha krav om å benytte annen eiendom verdier når vår søknad er under test.,

Våren Boot håndterer dette for oss ved å se i våre src/test/ressurser katalogen under en testkjøring. Igjen, standard egenskaper vil fortsatt være injiserbare som normalt, men vil bli overstyrt av disse hvis det er en kollisjon.

4.4. Den @TestPropertySource Kommentar

Hvis vi trenger mer detaljert kontroll over teste egenskaper, så vi kan bruke @TestPropertySource kommentar.,

Dette gir oss muligheten til å sette test egenskaper for en spesifikk test sammenheng, tar forrang over standard eiendom kilder:

Hvis vi ikke ønsker å bruke en fil, og vi kan angi navn og verdier direkte:

Vi kan også oppnå en lignende effekt ved hjelp av egenskapene argument for @SpringBootTest anmerkning:

4.5. Hierarkisk Egenskaper

Hvis vi har egenskaper som er gruppert sammen, kan vi gjøre bruk av @ConfigurationProperties kommentar, som skal kartlegge disse eiendel hierarkier i Java-objekter, grafer.,

La oss ta noen egenskaper som brukes til å konfigurere en database tilkobling:

database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=bar

Og deretter la oss bruke den merknaden til kart dem til en database objekt:

Våren Boot gjelder det convention over configuration tilnærming igjen, automatisk mapping mellom eiendom navn og tilhørende feltene. Alt vi trenger å gjøre er å oppgi holderen prefiks.

Hvis du ønsker å grave dypere inn i konfigurasjonen egenskaper, ta en titt på vår dyptgående artikkel.

4.6. Alternativ: YAML-Filer

Våren støtter også YAML-filer.,

Alle de samme navngi regler gjelder for test-spesifikke, miljø-spesifikke, og standard eiendom-filer. Den eneste forskjellen er den file extension og en avhengighet på SnakeYAML biblioteket være på vår classpath.,

YAML er spesielt bra for hierarkisk eiendom lagring; følgende eiendom-fil:

database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=barsecret: foo

er synonymt med følgende YAML-fil:

database: url: jdbc:postgresql:/localhost:5432/instance username: foo password: barsecret: foo

Det er også verdt å nevne at YAML-filer støtter ikke @PropertySource kommentar, så hvis vi trenger å bruke denne anmerkning, det ville begrense oss til å bruke en eiendommer-fil.

en Annen bemerkelsesverdig poenget er at i versjon 2.4.0 Våren Boot endret måten egenskaper som er lastet ned fra multi-dokument YAML-filer., Tidligere, den rekkefølgen de ble lagt til var basert på profilen aktivering ordre. Med den nye versjonen, men rammen følger samme bestilling regler som vi antydet tidligere for .egenskaper for filer, egenskaper erklært lavere i filen vil bare overstyre de høyere opp.

i Tillegg, i denne versjonen-profiler kan ikke lenger være aktivert fra profil-spesifikke dokumenter, noe som gjør resultatet klarere og mer forutsigbare.

4.7. Importere Flere konfigurasjonsfiler

Før versjon 2.4.,0, Våren Boot tillatt, inkludert ekstra konfigurasjon filer ved hjelp av våren.konfig.beliggenhet og våren.konfig.ekstra-plassering egenskaper, men de hadde visse begrensninger. For eksempel, de måtte være definert før du starter programmet (som miljø eller system egenskaper, eller via kommandolinje-argumenter) som de ble brukt tidlig i prosessen.

I de nevnte versjonen, kan vi bruke våren.konfig.import eiendom innenfor programmet.egenskaper eller program.yml file enkelt å inkludere flere filer., Denne eiendommen støtter noen interessante funksjoner:

  • for å legge til flere filer eller kataloger
  • filene kan lastes enten fra classpath eller fra en ekstern mappe
  • som angir om oppstart bør mislykkes hvis en fil ikke funnet, eller om det er en ekstra fil
  • import extensionless filer

La oss se et gyldig eksempel:

Merk: her er vi formatert dette hotellet direkte ved hjelp linjeskift bare for klarhet.

Våren skal behandle import som et nytt dokument som settes inn rett under import-deklarasjonen.

4.8., Egenskaper Fra kommandolinje Argumenter

i Tillegg til å bruke filer, kan vi passere egenskaper direkte på kommandolinjen:

java -jar app.jar --property="value"

Vi kan også gjøre dette via systemets egenskaper, som er gitt før -jar-kommandoen snarere enn etter det:

java -Dproperty.name="value" -jar app.jar

4.9. Egenskaper Fra miljøvariabler

Våren Boot vil også oppdage miljøvariabler, behandle dem som egenskaper:

export name=valuejava -jar app.jar

4.10., Randomisering av Eiendom-Verdier

Hvis vi ikke ønsker determinist eiendom verdier, kan vi bruke RandomValuePropertySource å randomize verdiene av egenskaper:

random.number=${random.int}random.long=${random.long}random.uuid=${random.uuid}

4.11. Flere Typer Eiendom Kilder

Våren Boot støtter et mangfold av eiendom kilder, for å implementere et godt tenkt ut bestille for å tillate en fornuftig overordnede. Det er verdt å konsultere den offisielle dokumentasjonen, som går lenger enn omfanget av denne artikkelen.,

Konfigurasjon ved Hjelp av Rå Bønner — det PropertySourcesPlaceholderConfigurer

i Tillegg til den praktiske metoder for å bli egenskaper til Våren, kan vi også definere og regiter holderen konfigurasjon bean manuelt.

Arbeide med PropertySourcesPlaceholderConfigurer gir oss full kontroll over konfigurasjon, med den ulempen av å være mer detaljert, og mesteparten av tiden, unødvendig.,

La oss se hvordan vi kan definere dette bean ved hjelp av Java-konfigurasjon:

Egenskaper i Foreldre-Barn-Sammenhenger

Dette spørsmålet kommer opp igjen og igjen: Hva skjer når våre web-applikasjon har en forelder og et barn sammenheng? Den overordnede konteksten kan ha noen felles kjerne funksjonalitet og bønner, og deretter ett (eller flere) barn sammenhenger, kanskje inneholder servlet-spesifikke bønner.

I så fall, hva er den beste måten å angi egenskaper for filer og inkludere dem i slike sammenhenger? Og hvordan du best kan hente disse egenskapene fra Våren?

Vi vil gi en enkel oversikt.,

Hvis filen er definert i Overordnet sammenheng:

  • @Verdi fungerer i Barn sammenheng: JA
  • @Verdi fungerer i Overordnet sammenheng: JA
  • miljø.getProperty i Barn sammenheng: JA
  • miljø.getProperty i Overordnet sammenheng: JA

Hvis filen er definert i Barnets kontekst:

  • @Verdi fungerer i Barn sammenheng: JA
  • @Verdi fungerer i Overordnet sammenheng: NEI
  • miljø.getProperty i Barn sammenheng: JA
  • miljø.,getProperty i Overordnet sammenheng: NEI

Konklusjon

Denne artikkelen viste flere eksempler på arbeid med egenskaper og egenskaper-filer i løpet av Våren.

Som alltid, hele koden støtte artikkelen er tilgjengelig over på GitHub.

– >

Komme i gang med Våren 5 og Våren Boot 2, gjennom å Lære Våren kurset:

>> KURSET

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *