Brug af application.yml vs application.properties i Spring Boot

1. Oversigt

En almindelig praksis i Spring Boot er at bruge en ekstern konfiguration til at definere vores egenskaber. Dette giver os mulighed for at bruge den samme applikationskode i forskellige miljøer.

Vi kan bruge egenskabsfiler, YAML-filer, miljøvariabler og kommandolinjeargumenter.

I denne korte vejledning undersøger vi de vigtigste forskelle mellem egenskaber og YAML-filer.

2. Egenskabskonfiguration

Spring Boot har som standard adgang til konfigurationer, der er angivet i en application.properties fil, der bruger et nøgleværdiformat:

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

Her er hver linje en enkelt konfiguration. Derfor skal vi udtrykke hierarkiske data ved at bruge de samme præfikser til vores nøgler. Og i dette eksempel hører hver nøgle til spring.datasource.

2.1. Pladsholdere i ejendomme

Inden for vores værdier kan vi bruge pladsholdere med ${} syntaks for at henvise til indholdet af andre nøgler, systemegenskaber eller miljøvariabler.

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

2.2. Liste struktur

Hvis vi har samme slags egenskaber med forskellige værdier, kan vi repræsentere listestrukturen med matrixindekser:

application.servers [0] .ip = 127.0.0.1 application.servers [0]. sti = / sti1 application.servers [1] .ip = 127.0.0.2 application.servers [1]. sti = / path2 application.servers [ 2] .ip = 127.0.0.3 application.servers [2] .sti = / sti3

3. YAML-konfiguration

3.1. YAML-format

Ud over Java-egenskabsfiler kan vi også bruge YAML-baserede konfigurationsfiler i vores Spring Boot-applikation. YAML er et praktisk format til angivelse af hierarkiske konfigurationsdata.

Lad os nu tage det samme eksempel fra vores egenskabsfil og konvertere det til YAML:

forår: datakilde: adgangskode: adgangskode url: jdbc: h2: dev brugernavn: SA

Dette kan være mere læsbart end dets egenskabsfilalternativ, da det ikke indeholder gentagne præfikser.

3.2. Liste struktur

YAML har et mere koncist format til at udtrykke lister:

applikation: servere: - ip: '127.0.0.1' sti: '/ sti1' - ip: '127.0.0.2' sti: '/ sti2' - ip: '127.0.0.3' sti: '/ sti3'

3.3. Flere profiler

En bonus ved at bruge YAML er, at den kan gemme flere profiler i den samme fil. Og i YAML, tre bindestreger angiver starten på et nyt dokument. Så alle profiler kan beskrives i den samme fil:

logfil: navn: myapplication.log fjeder: profiler: iscenesættelse datakilde: adgangskode: '' url: jdbc: h2: iscenesættelse brugernavn: SA --- forår: profiler: integration datakilde: adgangskode: 'adgangskode' url: jdbc: mysql: // localhost: 3306 / db_integration brugernavn: bruger

I dette eksempel har vi to forår sektioner med forskellige profiler markeret. Vi kan også have et fælles sæt egenskaber på rodniveau - i dette tilfælde er logging.file.name ejendom vil være den samme i alle profiler.

3.4. Profiler på tværs af flere filer

Som et alternativ til at have forskellige profiler i den samme fil kan vi gemme flere profiler på tværs af forskellige filer. Og dette er den eneste metode, der er tilgængelig, når du bruger ejendomme filer.

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

4. Brug af fjederstøvler

Nu hvor vi har defineret vores konfigurationer, skal vi se, hvordan vi får adgang til dem.

4.1. Værdi Kommentar

Vi kan indsprøjte værdierne for vores egenskaber ved hjælp af @Værdi kommentar:

@Value ("$ {key.something}") privat streng indsprøjtet ejendom;

Her, ejendommen nøgle. noget injiceres via markindsprøjtning i et af vores genstande.

4.2. Miljø Abstraktion

Vi kan også få værdien af ​​en ejendom ved hjælp af Miljø API:

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

4.3. ConfigurationProperties Kommentar

Endelig kan vi også bruge @ConfigurationProperties kommentar for at binde vores egenskaber til typesikre strukturerede objekter:

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

5. Konklusion

I denne artikel har vi set nogle forskelle mellem ejendomme og yml Spring Boot-konfigurationsfiler. Vi så også, hvordan deres værdier kunne henvise til andre egenskaber. Endelig så vi på, hvordan vi indsprøjtede værdierne i vores runtime.

Som altid er alle kodeeksempler tilgængelige på GitHub.