Injekciu mapy zo súboru YAML pomocou pružiny

1. Prehľad

V tomto rýchlom výučbe sa podrobne pozrieme ako vložiť mapu zo súboru YAML v Spring Boot.

Najskôr začneme trochou pochopenia pre súbory YAML v Spring Framework. Potom si prostredníctvom praktického príkladu ukážeme, ako viazať vlastnosti YAML na a Mapa.

2. Súbory YAML v jarnom rámci

Používanie súborov YAML na ukladanie externých konfiguračných údajov je bežnou praxou vývojárov na jar. V podstate Spring podporuje dokumenty YAML ako alternatívu k vlastnostiam a na ich analýzu používa SnakeYAML pod kapotou.

Bez ďalších okolkov sa pozrime, ako vyzerá typický súbor YAML:

server: port: 8090 application: name: myapplication url: //myapplication.com

Ako vidíme, Súbor YAML je samozrejmý a čitateľnejší pre človeka. V skutočnosti YAML poskytuje efektný a výstižný spôsob ukladania hierarchických konfiguračných údajov.

V predvolenom nastavení Spring Boot číta konfiguračné vlastnosti z application.properties alebo aplikácia.yml pri štarte aplikácie. Môžeme však použiť @PropertySource načítať vlastný súbor YAML.

Teraz, keď už vieme, čo je to súbor YAML, pozrime sa, ako vložiť vlastnosti YAML ako a Mapa v Spring Boot.

3. Ako si podať injekciu a Mapa zo súboru YAML

Spring Boot posunul externalizáciu dát na ďalšiu úroveň poskytnutím šikovnej anotácie s názvom @ConfigurationProperties. Táto anotácia je uvedená na jednoduché vloženie externých vlastností z konfiguračných súborov priamo do objektov Java.

V tejto časti sa budeme podrobne zaoberať tým, ako pomocou YAML viazať vlastnosti YAML do triedy bean @ConfigurationProperties anotácia.

Najskôr definujeme niektoré vlastnosti kľúč - hodnota v aplikácia.yml:

server: application: name: InjectMapFromYAML url: //injectmapfromyaml.dev description: Ako vložiť mapu zo súboru YAML v konfigurácii Spring Boot: ips: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 súborový systém: - / dev / root - / dev / md2 - / dev / md4 používatelia: root: používateľské meno: heslo root: rootpass hosť: používateľské meno: heslo hosťa: passpass

V tomto príklade sa pokúsime zmapovať žiadosť do jednoduchého Mapa. Podobne vpichneme konfigur podrobnosti ako a Mapa, a používateľov ako Mapa s String kľúče a objekty patriace do používateľom definovanej triedy - Poverenie - ako hodnoty.

Po druhé, vytvorme triedu fazule - ServerProperties - zapuzdriť logiku viazania našich konfiguračných vlastností na Mapas:

@Component @ConfigurationProperties (prefix = "server") verejná trieda ServerProperties {súkromná mapová aplikácia; súkromná mapa konfigurácia; súkromní používatelia máp; // getters and setters public static class Credential {private String username; súkromné ​​reťazcové heslo; // zakladatelia a zakladatelia}}

Ako vidíme, zdobili sme ServerProperties trieda s @ConfigurationProperties. Takto povieme Springu, aby namapovala všetky vlastnosti so zadanou predponou na objekt ServerProperties.

Pripomeňme, že je potrebné povoliť aj našu aplikáciu pre vlastnosti konfigurácie, aj keď sa to vo väčšine aplikácií Spring Boot deje automaticky.

Na záver otestujme, či sú naše vlastnosti YAML správne vložené ako Mapas:

@RunWith (SpringRunner.class) @SpringBootTest trieda 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 vs @Hodnota

Teraz urobme rýchle porovnanie @ConfigurationProperties a @Hodnota.

Napriek skutočnosti, že obe anotácie možno použiť na vloženie vlastností z konfiguračných súborov, sú dosť odlišné. Hlavný rozdiel medzi týmito dvoma anotáciami je v tom, že každá slúži na iný účel.

V skratke, @Value umožňuje priamo vložiť konkrétnu nehnuteľnosť hodnotu jeho kľúčom. Avšak @ConfigurationProperties anotácia viaže viaceré vlastnosti konkrétnemu objektu a poskytuje prístup k vlastnostiam prostredníctvom mapovaného objektu.

Spring vo všeobecnosti odporúča používať @ConfigurationProperties cez @Hodnota pokiaľ ide o vkladanie konfiguračných údajov. @ConfigurationProperties ponúka skvelý spôsob, ako centralizovať a zoskupovať vlastnosti konfigurácie v štruktúrovanom objekte, ktorý môžeme neskôr vložiť do iných fazúľ.

5. Záver

Ak to zhrnieme, najskôr sme vysvetlili, ako si injekčne podať a Mapa zo súboru YAML v Spring Boot. Potom sme zvýraznili rozdiel medzi @ConfigurationProperties a @Hodnota.

Kompletný zdrojový kód článku je ako obvykle k dispozícii na serveri GitHub.


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