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
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.