Vår YAML vs eiendommer
1. Introduksjon
YAML er en menneskelig vennlig notasjon som brukes i konfigurasjonsfiler. Hvorfor foretrekker vi denne dataserialiseringen fremfor eiendomsfilen i Spring Boot? Foruten lesbarhet og reduksjon av repetisjon, er YAML det perfekte språket for å skrive konfigurasjon som kode for distribusjonene.
På samme måte forenkler bruken av YAML for Spring DevOps lagring av konfigurasjonsvariablene i miljøet som 12 Factor Authenticator anbefaler.
I denne opplæringen vil vi sammenligne Spring YAML versus egenskaper-filen for å sjekke de viktigste fordelene ved å bruke den ene over den andre. Men husk at valg av YAML i forhold til filkonfigurasjon av egenskaper er noen ganger en beslutning om personlig smak.
2. YAML-notasjon
YAML står for et rekursivt akronym for “YAML er ikke merkespråk“. Det gir følgende egenskaper:
- Mer klarhet og menneskelig vennlighet
- Perfekt for hierarkiske konfigurasjonsdata
- Den støtter forbedringsfunksjoner som kart, lister og skalartyper
Disse mulighetene gjør YAML til den perfekte følgesvenn for Vårkonfigurasjonsfiler. Et ord med forsiktighet her for de som begynner med YAML: å skrive det kan være litt kjedelig i begynnelsen på grunn av dets innrykkingsregler.
La oss se hvordan det fungerer!
3. Vår YAML-konfigurasjon
Som det ble nevnt i forrige seksjoner, er YAML et ekstraordinært dataformat for konfigurasjonsfiler. Det er mye mer lesbart, og det gir forbedrede muligheter over eiendomsfilen. Derfor er det fornuftig å anbefale denne notasjonen over konfigurasjon av egenskapsfilen. Videre, fra versjon 1.2, er YAML et supersett av JSON.
I tillegg overstyrer konfigurasjonsfilene som er plassert utenfor gjenstanden de som er inne i den pakket glasset. Et annet interessant trekk ved vårkonfigurasjon er muligheten for å tilordne miljøvariabler ved kjøretid. Dette er ekstremt viktig for DevOps-distribusjoner.
Fjærprofiler gjør det mulig å skille miljøene og bruke forskjellige egenskaper på dem. YAML legger til muligheten for å inkludere flere profiler i samme fil.
Merk: denne funksjonen støttes også for eiendomsfiler med Spring Boot 2.4.0.
I vårt tilfelle har vi for distribusjonsformål tre: testing, utvikling og produksjon:
vår: profiler: aktiv: - test --- vår: konfigurering: aktiver: på profil: testnavn: test-YAML-miljø: testservere: - www.abc.test.com - www.xyz.test.com - - vår: config: aktiver: on-profile: prod navn: prod-YAML miljø: produksjonsservere: - www.abc.com - www.xyz.com --- spring: config: aktiver: on-profile: dev navn: $ {DEV_NAME: dev-YAML} -miljø: utviklingsservere: - www.abc.dev.com - www.xyz.dev.com
Merk: hvis vi bruker en Spring Boot-versjon før 2.4.0, bør vi bruke våren.profiler eiendom i stedet for spring.config.activate.on-profile vi brukte her.
La oss nå sjekke våren.profiler.aktiv egenskap som tildeler testmiljøet som standard. Vi kan distribuere gjenstanden ved hjelp av forskjellige profiler uten å bygge kildekoden igjen.
En annen interessant funksjon på våren er at du kan aktivere profilen via miljøvariabelen:
eksporter SPRING_PROFILES_ACTIVE = dev
Vi ser relevansen av denne miljøvariabelen i Testing-delen. Til slutt kan vi konfigurere YAML-egenskaper som tildeler verdien direkte fra miljøet:
navn: $ {DEV_NAME: dev-YAML}
Vi kan se at hvis ingen miljøvariabler er konfigurert, er en standardverdi dev-YAML benyttes.
4. Reduksjon av gjentakelse og lesbarhet
Den hierarkiske strukturen til YAML gir måter å redusere de øvre nivåene av konfigurasjonsegenskapsfilen. La oss se forskjellene med et eksempel:
komponent: idm: url: myurl bruker: brukerpassord: passordbeskrivelse:> dette skal være en lang beskrivelse tjeneste: url: myurlservice token: token beskrivelse:> dette skal være en annen lang beskrivelse
Den samme konfigurasjonen vil bli overflødig ved å bruke egenskapsfilen:
component.idm.url = myurl component.idm.user = bruker component.idm.password = passord component.idm.description = dette skal være en lang \ beskrivelse component.service.url = myurlservice component.service.token = token komponent. service.description = dette skal være en annen lang \ beskrivelse
Den hierarkiske naturen til YAML forbedrer lesbarheten sterkt. Det er ikke bare et spørsmål om å unngå repetisjoner, men også fordypningen, godt brukt, beskriver perfekt hva konfigurasjonen handler om og hva det er for. Med YAML, som i tilfeller med egenskapsfil med tilbakeslag \, er det mulig å dele innholdet i flere linjer med > karakter.
5. Lister og kart
Vi kan konfigurere lister og kart ved hjelp av YAML og egenskapsfil.
Det er to måter å tilordne verdier og lagre dem i en liste:
servere: - www.abc.test.com - www.xyz.test.com ekstern: [www.abc.test.com, www.xyz.test.com]
Begge eksemplene gir det samme resultatet. Den tilsvarende konfigurasjonen ved bruk av egenskaper-filen vil være vanskeligere å lese:
servere [0] = www.abc.test.com servere [1] = www.xyz.test.com ekstern = www.abc.test.com, www.xyz.test.com
Igjen er YAML-versjonen mer lesbar og tydelig.
På samme måte kan vi konfigurere kart:
map: firstkey: key1 secondkey: key2
6. Testing
La oss nå sjekke om alt fungerer som forventet. Hvis vi sjekker loggingen av applikasjonen, kan vi se at miljøet som er valgt som standard tester:
2020-06-11 13: 58: 28.846 INFO 10720 --- [main] com.baeldung.yaml.MyApplication: ... using environment: testing name: test-YAML servers: [www.abc.test.com, www .xyz.test.com] ekstern: [www.abc.test.com, www.xyz.test.com] kart: {firstkey = key1, secondkey = key2} Idm: Url: myurl User: user Password: password Description: dette skal være en lang beskrivelse Tjeneste: Url: myurlservice Token: token Beskrivelse: dette skal være en annen lang beskrivelse
Vi kan overskrive navnet ved å konfigurere DEV_NAME i miljøet:
eksporter DEV_NAME = new-dev-YAML
Vi kan se at navnet på miljøet endres ved å kjøre applikasjonen med dev-profil:
2020-06-11 17: 00: 45.459 INFO 19636 --- [main] com.baeldung.yaml.MyApplication: ... ved hjelp av miljø: utviklingsnavn: new-dev-YAML servere: [www.abc.dev.com , www.xyz.dev.com]
La oss løpe for produksjonsmiljøet ved hjelp av SPRING_PROFILES_ACTIVE = prod:
eksporter SPRING_PROFILES_ACTIVE = prod 2020-06-11 17: 03: 33.074 INFO 20716 --- [main] ... bruker miljø: produksjonsnavn: prod-YAML-servere: [www.abc.com, www.xyz.com]
7. Konklusjon
I denne opplæringen beskrev vi komplikasjonene ved bruk av YAML-konfigurasjon sammenlignet med egenskapsfilen.
Vi viste det YAML gir muligheter for menneskelig brukervennlighet, det reduserer repetisjon og er mer kortfattet enn dens filfilvariant.
Som alltid er koden tilgjengelig på GitHub.