Proljetni YAML vs Properties

1. Uvod

YAML je oznaka prilagođena ljudima koja se koristi u konfiguracijskim datotekama. Zašto bismo više voljeli ovu serializaciju podataka od datoteke svojstava u Spring Boot-u? Osim čitljivosti i smanjenja ponavljanja, YAML je savršen jezik za pisanje Konfiguracije kao koda za implementacije.

Na isti način, upotreba YAML-a za Spring DevOps olakšava pohranu konfiguracijskih varijabli u okruženju kao što 12 Factor Authenticator preporučuje.

U ovom ćemo uputstvu usporediti Spring YAML s datotekom svojstava kako bismo provjerili glavne prednosti korištenja jednog nad drugim. Ali ne zaboravite, odabir YAML-a nad konfiguracijom datoteke svojstava ponekad je odluka osobnog ukusa.

2. YAML notacija

YAML je kratica za rekurzivnu kraticu za „YAML nije označni jezik“. Pruža sljedeće karakteristike:

  • Više jasnoće i ljubaznosti prema ljudima
  • Savršeno za hijerarhijske podatke o konfiguraciji
  • Podržava poboljšane mogućnosti poput karata, popisa i skalarnih vrsta

Te mogućnosti čine YAML savršenim suputnikom za Proljetne konfiguracijske datoteke. Riječ opreza ovdje za one koji počinju s YAML-om: pisanje na početku može biti pomalo zamorno zbog njegovih pravila uvlačenja.

Da vidimo kako to funkcionira!

3. Proljetna YAML konfiguracija

Kao što je spomenuto u prethodnim odjeljcima, YAML je izvanredan format podataka za konfiguracijske datoteke. Puno je čitljiviji i pruža poboljšane mogućnosti u datoteci svojstava. Stoga ima smisla preporučiti ovaj zapis preko konfiguracije datoteke svojstava. Nadalje, od verzije 1.2, YAML je superset JSON-a.

Uz to, u proljeće konfiguracijske datoteke smještene izvan artefakta nadjačavaju datoteke unutar zapakirane staklenke. Još jedna zanimljiva značajka Spring konfiguracije je mogućnost dodjeljivanja varijabli okruženja tijekom izvođenja. To je izuzetno važno za implementacije DevOpsa.

Opružni profili omogućuju razdvajanje okruženja i primjenu različitih osobina na njih. YAML dodaje mogućnost uključivanja nekoliko profila u istu datoteku.

Napomena: ova je značajka podržana i za datoteke svojstava s Spring Boot 2.4.0.

U našem ćemo slučaju za potrebe implementacije imati tri: testiranje, razvoj i proizvodnju:

opruga: profili: aktivan: - test --- proljeće: config: activate: on-profile: naziv testa: test-YAML okruženje: testiranje poslužitelja: - www.abc.test.com - www.xyz.test.com - - spring: config: activate: on-profile: prod name: prod-YAML environment: production servers: - www.abc.com - www.xyz.com --- spring: config: activate: on-profile: dev name: $ {DEV_NAME: dev-YAML} okruženje: razvojni poslužitelji: - www.abc.dev.com - www.xyz.dev.com

Napomena: ako koristimo verziju Spring Boot prije 2.4.0, trebali bismo koristiti opruga.profili svojstvo umjesto spring.config.activate.on-profile koristili smo ovdje.

Provjerimo sada opruga.profili.aktivan svojstvo koje prema zadanim postavkama dodjeljuje testno okruženje. Artefakt možemo preusmjeriti pomoću različitih profila bez ponovne izgradnje izvornog koda.

Još jedna zanimljiva značajka u proljeće je ta da profil možete omogućiti putem varijable okoline:

izvoz SPRING_PROFILES_ACTIVE = dev

Relevantnost ove varijable okruženja vidjet ćemo u odjeljku Testiranje. Napokon, možemo konfigurirati YAML svojstva koja izravno dodjeljuju vrijednost iz okoline:

ime: $ {DEV_NAME: dev-YAML}

Možemo vidjeti da ako nije konfigurirana nijedna varijabla okoline, zadana vrijednost dev-YAML koristi se.

4. Smanjenje ponavljanja i čitljivosti

Hijerarhijska struktura YAML-a pruža načine smanjenja gornjih razina datoteke konfiguracijskih svojstava. Pogledajmo razlike na primjeru:

komponenta: idm: url: myurl korisnik: korisnička lozinka: opis lozinke:> ovo bi trebala biti usluga dugog opisa: url: myurlservice token: token description:> ovo bi trebao biti drugi dugi opis

Ista konfiguracija postala bi suvišna pomoću datoteke svojstava:

komponenta.idm.url = myurl komponenta.idm.user = korisnička komponenta.idm.password = lozinka komponenta.idm.description = ovo bi trebala biti dugačka \ description komponenta.service.url = myurlservice komponenta.service.token = žeton komponenta. service.description = ovo bi trebao biti još jedan dugi \ opis

Hijerarhijska priroda YAML-a uvelike poboljšava čitljivost. Nije samo pitanje izbjegavanja ponavljanja već i uvlačenje, koje se dobro koristi, savršeno opisuje o čemu se radi u konfiguraciji i čemu služi. Sa YAML-om, kao u slučaju datoteke svojstava s kosom crtom \, moguće je razbiti sadržaj u više redaka pomoću > lik.

5. Popisi i karte

Popise i karte možemo konfigurirati pomoću YAML-a i datoteke svojstava.

Postoje dva načina za dodjeljivanje vrijednosti i njihovo spremanje na popis:

poslužitelji: - www.abc.test.com - www.xyz.test.com vanjski: [www.abc.test.com, www.xyz.test.com]

Oba primjera daju isti rezultat. Ekvivalentnu konfiguraciju pomoću datoteke svojstava bilo bi teže pročitati:

poslužitelji [0] = www.abc.test.com poslužitelji [1] = www.xyz.test.com external = www.abc.test.com, www.xyz.test.com

Ponovno je YAML verzija čitljivija i jasnija za ljude.

Na isti način možemo konfigurirati karte:

map: firstkey: key1 secondkey: key2

6. Ispitivanje

Sada provjerimo radi li sve prema očekivanjima. Ako provjerimo zapisivanje aplikacije, možemo vidjeti da se prema zadanim postavkama odabrano okruženje testira:

2020-06-11 13: 58: 28.846 INFO 10720 --- [glavna] com.baeldung.yaml.MyApplication: ... koristeći okruženje: naziv testiranja: test-YAML poslužitelji: [www.abc.test.com, www .xyz.test.com] external: [www.abc.test.com, www.xyz.test.com] map: {firstkey = key1, secondkey = key2} Idm: Url: myurl Korisnik: korisnička lozinka: lozinka Opis: ovo bi trebao biti dugački opis Usluga: Url: myurlservice Token: token Opis: ovo bi trebao biti drugi dugi opis

Konfiguracijom možemo prepisati ime DEV_NAME u okolišu:

izvoz DEV_NAME = new-dev-YAML

Vidimo da se ime okoline mijenja u izvršavanju aplikacije s dev profilom:

2020-06-11 17: 00: 45.459 INFO 19636 --- [glavna] com.baeldung.yaml.MyApplication: ... koristeći okruženje: naziv razvoja: new-dev-YAML poslužitelji: [www.abc.dev.com , www.xyz.dev.com]

Pokrenimo se za proizvodno okruženje koristeći SPRING_PROFILES_ACTIVE = prod:

izvoz SPRING_PROFILES_ACTIVE = prod 2020-06-11 17: 03: 33.074 INFO 20716 --- [glavni] ... koristeći okruženje: proizvodno ime: poslužitelji prod-YAML: [www.abc.com, www.xyz.com]

7. Zaključak

U ovom uputstvu opisali smo zamršenost upotrebe YAML konfiguracije u usporedbi s datotekom svojstava.

Pokazali smo to YAML pruža mogućnosti prilagođavanja ljudima, smanjuje ponavljanje i sažetiji je od varijante datoteke sa svojstvima.

Kao i uvijek, kôd je dostupan na GitHub-u.


$config[zx-auto] not found$config[zx-overlay] not found