Bruke application.yml vs application.properties i Spring Boot

1. Oversikt

En vanlig praksis i Spring Boot er å bruke en ekstern konfigurasjon for å definere egenskapene våre. Dette lar oss bruke den samme applikasjonskoden i forskjellige miljøer.

Vi kan bruke egenskapsfiler, YAML-filer, miljøvariabler og kommandolinjeargumenter.

I denne korte opplæringen vil vi utforske hovedforskjellene mellom egenskaper og YAML-filer.

2. Egenskaper Konfigurasjon

Som standard har Spring Boot tilgang til konfigurasjoner som er angitt i en application.properties fil, som bruker et nøkkelverdiformat:

spring.datasource.url = jdbc: h2: dev spring.datasource.username = SA spring.datasource.password = passord

Her er hver linje en enkelt konfigurasjon. Derfor må vi uttrykke hierarkiske data ved å bruke de samme prefikset for nøklene våre. Og i dette eksemplet tilhører hver nøkkel våren.datakilde.

2.1. Plassholdere i eiendommer

Innenfor våre verdier kan vi bruke plassholdere med ${} syntaks for å referere til innholdet i andre nøkler, systemegenskaper eller miljøvariabler.

app.name = MyApp app.description = $ {app.name} er en Spring Boot-applikasjon

2.2. Listestruktur

Hvis vi har samme type egenskaper med forskjellige verdier, kan vi representere listestrukturen med matriseindekser:

application.servers [0] .ip = 127.0.0.1 application.servers [0]. path = / path1 application.servers [1] .ip = 127.0.0.2 application.servers [1]. path = / path2 application.servers [ 2] .ip = 127.0.0.3 application.servers [2] .path = / path3

3. YAML-konfigurasjon

3.1. YAML-format

I tillegg til Java-egenskapsfiler, kan vi også bruke YAML-baserte konfigurasjonsfiler i vår Spring Boot-applikasjon. YAML er et praktisk format for å spesifisere hierarkiske konfigurasjonsdata.

La oss nå ta det samme eksemplet fra eiendomsfilen vår og konvertere den til YAML:

vår: datakilde: passord: passord url: jdbc: h2: dev brukernavn: SA

Dette kan være mer lesbart enn alternativet for eiendomsfiler, da det ikke inneholder gjentatte prefikser.

3.2. Listestruktur

YAML har et mer kortfattet format for å uttrykke lister:

applikasjon: servere: - ip: '127.0.0.1' path: '/ path1' - ip: '127.0.0.2' path: '/ path2' - ip: '127.0.0.3' path: '/ path3'

3.3. Flere profiler

En bonus ved å bruke YAML er at den kan lagre flere profiler i samme fil. Og i YAML, tre streker indikerer starten på et nytt dokument. Så alle profilene kan beskrives i samme fil:

loggfil: navn: myapplication.log fjær: profiler: staging datakilde: passord: '' url: jdbc: h2: staging brukernavn: SA --- vår: profiler: integrasjon datakilde: passord: 'passord' url: jdbc: mysql: // localhost: 3306 / db_integration brukernavn: bruker

I dette eksemplet har vi to vår seksjoner med forskjellige profiler merket. Vi kan også ha et felles sett med egenskaper på rotnivå - i dette tilfellet, logging.file.name eiendommen vil være den samme i alle profiler.

3.4. Profiler over flere filer

Som et alternativ til å ha forskjellige profiler i samme fil, kan vi lagre flere profiler på tvers av forskjellige filer. Og dette er den eneste metoden som er tilgjengelig når du bruker eiendommer filer.

Vi oppnår dette ved å sette navnet på profilen i filnavnet - for eksempel application-dev.yml eller application-ev.properties.

4. Bruk av vårstøvler

Nå som vi har definert konfigurasjonene våre, la oss se hvordan du får tilgang til dem.

4.1. Verdi Kommentar

Vi kan injisere verdiene til egenskapene våre ved hjelp av @Verdi kommentar:

@Value ("$ {key.something}") privat streng injisert Eiendom;

Her eiendommen nøkkel. noe injiseres via feltinjeksjon i et av objektene våre.

4.2. Miljø Abstraksjon

Vi kan også få verdien av en eiendom ved hjelp av Miljø API:

@Autowired private Environment env; public String getSomeKey () {return env.getProperty ("key.something"); } 

4.3. ConfigurationProperties Kommentar

Endelig kan vi også bruke @ConfigurationProperties kommentar for å binde egenskapene våre til typesikre strukturerte objekter:

@ConfigurationProperties (prefix = "mail") offentlig klasse ConfigProperties {Strengnavn; Strengbeskrivelse; ...

5. Konklusjon

I denne artikkelen har vi sett noen forskjeller mellom eiendommer og yml Spring Boot-konfigurasjonsfiler. Vi så også hvordan verdiene deres kunne referere til andre egenskaper. Til slutt så vi på hvordan vi kunne injisere verdiene i kjøretiden.

Som alltid er alle kodeeksemplene tilgjengelige på GitHub.