Ubrizgajte mapu iz YAML datoteke s Springom

1. Pregled

U ovom brzom uputstvu detaljno ćemo pogledati kako ubrizgati mapu iz YAML datoteke u Spring Boot.

Prvo ćemo započeti s malim uvidom u YAML datoteke u Spring Framework. Zatim ćemo na praktičnom primjeru prikazati kako povezati svojstva YAML s a Karta.

2. YAML datoteke u Spring Framework

Korištenje YAML datoteka za pohranu vanjskih podataka o konfiguraciji uobičajena je praksa među programerima Springa. U osnovi, Spring podržava YAML dokumente kao alternativu svojstvima i koristi SnakeYAML ispod haube za njihovo raščlanjivanje.

Bez daljnjega, pogledajmo kako izgleda tipična YAML datoteka:

poslužitelj: port: 8090 aplikacija: ime: myapplication url: //myapplication.com

Kao što vidimo, YAML datoteka je sama po sebi razumljiva i čitljivija za ljude. Zapravo, YAML pruža otmjen i sažet način za pohranu hijerarhijskih podataka o konfiguraciji.

Prema zadanim postavkama Spring Boot čita konfiguracijska svojstva iz primjena.svojstva ili primjena.iml pri pokretanju aplikacije. Međutim, možemo koristiti @PropertySource za učitavanje prilagođene YAML datoteke.

Sad kad smo upoznati s tim što je YAML datoteka, pogledajmo kako ubrizgati YAML svojstva kao Karta u Spring Boot.

3. Kako ubrizgati a Karta iz YAML datoteke

Spring Boot podigao je eksternalizaciju podataka na sljedeću razinu pružajući praktičnu napomenu pod nazivom @ConfigurationProperties. Uvedena je ova napomena za jednostavno ubrizgavanje vanjskih svojstava iz konfiguracijskih datoteka izravno u Java objekte.

U ovom ćemo odjeljku detaljno objasniti kako povezati svojstva YAML u klasu graha pomoću @ConfigurationProperties bilješka.

Prvo definirajmo neka svojstva ključ / vrijednost u primjena.iml:

poslužitelj: aplikacija: ime: InjectMapFromYAML url: //injectmapfromyaml.dev opis: Kako ubrizgati kartu iz YAML datoteke u Spring Boot config: ips: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 datotečni sustav: - / dev / root - / dev / md2 - / dev / md4 korisnici: root: korisničko ime: root lozinka: rootpass gost: korisničko ime: lozinka za goste: guestpass

U ovom ćemo primjeru pokušati mapirati primjena u jednostavan Karta. Slično ćemo ubrizgati konfiguracija detalji kao a Karta, i korisnika kao Karta s Niz ključevi i objekti koji pripadaju korisnički definiranoj klasi - Vjerodajnica - kao vrijednosti.

Drugo, izradimo klasu graha - Svojstva poslužitelja - za inkapsuliranje logike vezivanja naših konfiguracijskih svojstava za Kartas:

@Component @ConfigurationProperties (prefix = "server") javna klasa ServerProperties {aplikacija za privatnu mapu; privatna karta config; privatni korisnici karte; // getteri i postavljači javna statička klasa Vjerodajnica {private String korisničko ime; privatna lozinka za niz; // geteri i postavljači}}

Kao što vidimo, ukrasili smo Svojstva poslužitelja razred sa @ConfigurationProperties. Na taj način kažemo Springu da sva svojstva s navedenim prefiksom preslika na objekt od Svojstva poslužitelja.

Podsjetimo da našu aplikaciju treba omogućiti i za svojstva konfiguracije, iako se to radi automatski u većini aplikacija Spring Boot.

Na kraju, testirajmo jesu li naša YAML svojstva pravilno ubrizgana kao Kartas:

@RunWith (SpringRunner.class) @SpringBootTest klasa MapFromYamlIntegrationTest {@Autowired private ServerProperties serverProperties; @Test public void whenYamlFileProvidedThenInjectSimpleMap () {assertThat (serverProperties.getApplication ()) .containsOnlyKeys ("name", "url", "description"); assertThat (serverProperties.getApplication () .get ("name")). isEqualTo ("InjectMapFromYAML"); } @Test public void whenYamlFileProvidedThenInjectComplexMap () {assertThat (serverProperties.getConfig ()). HasSize (2); assertThat (serverProperties.getConfig () .get ("ips") .get (0)). isEqualTo ("10.10.10.10"); assertThat (serverProperties.getUsers () .get ("root") .getUsername ()). isEqualTo ("root"); }}

4. @ConfigurationProperties nasuprot @Vrijednost

Sada napravimo brzu usporedbu @ConfigurationProperties i @Vrijednost.

Unatoč činjenici da se obje napomene mogu koristiti za ubrizgavanje svojstava iz konfiguracijskih datoteka, sasvim su različiti. Glavna razlika između ove dvije bilješke je u tome što svaka služi u drugu svrhu.

Ukratko, @Value omogućuje nam izravno ubrizgavanje određenog svojstva vrijednost po ključu. Međutim, @ConfigurationProperties napomena veže više svojstava određenom objektu i omogućuje pristup svojstvima putem mapiranog objekta.

Općenito, Spring preporučuje upotrebu @ConfigurationProperties nad @Vrijednost što se tiče ubrizgavanja podataka o konfiguraciji. @ConfigurationProperties nudi izvrstan način za centraliziranje i grupiranje konfiguracijskih svojstava u strukturiranom objektu koji kasnije možemo ubrizgati u druge grah.

5. Zaključak

Da rezimiramo, prvo smo objasnili kako ubrizgati a Karta iz YAML datoteke u Spring Boot-u. Zatim smo istakli razliku između @ConfigurationProperties i @Vrijednost.

Kao i obično, cjeloviti izvorni kôd članka dostupan je na GitHubu.


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