Fecskendezzen be egy térképet egy YAML-fájlból tavasszal

1. Áttekintés

Ebben a gyors bemutatóban alaposan meg fogjuk vizsgálni hogyan lehet térképet injektálni egy YAML fájlból a Spring Boot alkalmazásban.

Először egy kis betekintést kezdünk a YAML fájlokba a Spring Framework-ben. Ezután egy gyakorlati példán keresztül bemutatjuk, hogyan lehet a YAML tulajdonságokat a Térkép.

2. YAML fájlok a tavaszi keretrendszerben

A YAML fájlok használata külső konfigurációs adatok tárolására a tavaszi fejlesztők körében általános gyakorlat. Alapvetően, A Spring támogatja a YAML dokumentumokat a tulajdonságok alternatívájaként, és a SnakeYAML-et használja a motorháztető alatt, hogy azokat elemezze.

Minden további nélkül megnézzük, hogy néz ki egy tipikus YAML fájl:

szerver: port: 8090 alkalmazás: név: myapplication url: //myapplication.com

Mint láthatjuk, a A YAML fájl magától értetődő és emberileg olvashatóbb. Valójában a YAML fantasztikus és tömör módot kínál a hierarchikus konfigurációs adatok tárolására.

Alapértelmezés szerint a Spring Boot a konfigurációs tulajdonságokat olvassa le alkalmazás.tulajdonságok vagy alkalmazás.yml az alkalmazás indításakor. Használhatjuk azonban @PropertySource egyéni YAML fájl betöltéséhez.

Most, hogy ismerjük, mi a YAML fájl, nézzük meg, hogyan lehet a YAML tulajdonságokat a Térkép tavaszi csizmában.

3. Hogyan kell beadni a Térkép egy YAML fájlból

A Spring Boot az adatok külsõvé tételét egy új szintre emelte azáltal, hogy praktikus feljegyzéssel hívta @ConfigurationProperties. Ez a megjegyzés bevezetésre kerül hogy a konfigurációs fájlokból származó külső tulajdonságokat egyszerűen injektálja közvetlenül a Java objektumokba.

Ebben a szakaszban részletesen bemutatjuk, hogyan lehet a YAML tulajdonságokat egy babosztályba kapcsolni a @ConfigurationProperties annotáció.

Először definiáljunk néhány kulcsérték tulajdonságot a alkalmazás.yml:

kiszolgáló: alkalmazás: név: InjectMapFromYAML url: //injectmapfromyaml.dev leírás: Hogyan lehet térképet injektálni egy YAML fájlból Spring Boot konfigurációban: ips: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 fájlrendszer: - / dev / root - / dev / md2 - / dev / md4 felhasználók: root: felhasználónév: root jelszó: rootpass vendég: felhasználónév: vendég jelszó: guestpass

Ebben a példában megpróbáljuk feltérképezni Alkalmazás egyszerűvé Térkép. Hasonlóképpen beadunk injekciót is konfig részletek a Térkép, és felhasználók mint a Térkép val vel Húr kulcsok és objektumok, amelyek egy felhasználó által meghatározott osztályba tartoznak - Hitelesítő adatok - mint értékeket.

Másodszor, hozzunk létre egy bab osztályt - ServerProperties - hogy összefoglalja a konfigurációs tulajdonságokhoz való kötés logikáját Térképs:

@Component @ConfigurationProperties (prefix = "server") public class ServerProperties {private Map alkalmazás; privát térkép config; privát Térkép-felhasználók; // getterek és beállítók public static class Credential {private String felhasználónév; privát karakterlánc jelszó; // szerelők és beállítók}}

Mint láthatjuk, díszítettük a ServerProperties osztályban @ConfigurationProperties. Így azt mondjuk Springnek, hogy térképezze fel az összes tulajdonságot a megadott előtaggal egy objektumhoz ServerProperties.

Emlékezzünk arra, hogy alkalmazásunkat engedélyezni kell a konfigurációs tulajdonságoknál is, bár ez a legtöbb Spring Boot alkalmazásban automatikusan megtörténik.

Végül teszteljük, hogy a YAML tulajdonságait megfelelően injektáltuk-e Térképs:

@RunWith (SpringRunner.class) @SpringBootTest osztály MapFromYamlIntegrationTest {@Autowired private ServerProperties serverProperties; @Test public void whenYamlFileProvidedThenInjectSimpleMap () {assertThat (serverProperties.getApplication ()) .containsOnlyKeys ("név", "url", "leírás"); assertThat (serverProperties.getApplication () .get ("név")). 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. @Érték

Most végezzük el a gyors összehasonlítást @ConfigurationProperties és @Érték.

Annak ellenére, hogy mindkét megjegyzés felhasználható tulajdonságok injektálására a konfigurációs fájlokból, egészen mások. A két annotáció közötti legfőbb különbség az, hogy mindegyik más és más célt szolgál.

Röviden, @Value lehetővé teszi számunkra, hogy közvetlenül beadjunk egy adott tulajdonságot értéket a kulcsával. Azonban, @ConfigurationProperties az annotáció több tulajdonságot is köt egy adott objektumhoz, és hozzáférést biztosít a tulajdonságokhoz a leképezett objektumon keresztül.

Általában Spring javasolja a használatát @ConfigurationProperties felett @Érték amikor a konfigurációs adatok beadásáról van szó. @ConfigurationProperties remek lehetőséget kínál a konfigurációs tulajdonságok központosítására és csoportosítására egy strukturált objektumban, amelyeket később más babokba is beinjektálhatunk.

5. Következtetés

Összefoglalva, először elmagyaráztuk, hogyan kell beadni a Térkép YAML fájlból a Spring Boot alkalmazásban. Ezután kiemeltük a különbséget @ConfigurationProperties és @Érték.

Szokás szerint a cikk teljes forráskódja elérhető a GitHubon.