áttekintés
Ez a bemutató megmutatja, hogyan kell beállítani és használni tulajdonságok tavasszal keresztül Java configuration and @PropertySource.
azt is látni fogjuk, hogyan működnek a tulajdonságok a tavaszi indításkor.
További olvasmány:
tavaszi kifejezés nyelvi útmutató
konfiguráljon egy tavaszi rendszerindító webes alkalmazást
útmutató a @ConfigurationProperties in Spring Boot
regisztráljon egy Tulajdonságfájlt megjegyzéseken keresztül
a tavaszi 3.1 bemutatja az új @PropertySource megjegyzést, mint kényelmes mechanizmust az ingatlanforrások környezetbe történő hozzáadásához.,
ezt a megjegyzést a @konfigurációs megjegyzéssel együtt használhatjuk:
@Configuration@PropertySource("classpath:foo.properties")public class PropertiesWithJavaConfig { //...}
egy új tulajdonságfájl regisztrálásának másik nagyon hasznos módja egy helyőrző használata, amely lehetővé teszi számunkra, hogy dinamikusan válasszuk ki a megfelelő fájlt futásidőben:
@PropertySource({ "classpath:persistence-${envTarget:mysql}.properties"})...
2.1. Több Tulajdonsághely meghatározása
a @ PropertySource megjegyzés a Java 8 konvenciók szerint ismételhető., Ezért, ha Java 8 vagy újabb verziót használunk, akkor ezt a megjegyzést több tulajdonsághely meghatározására is használhatjuk:
természetesen a @PropertySources annotációt is használhatjuk, valamint megadhatjuk a @PropertySource tömbjét. Ez minden támogatott Java verzióban működik, nem csak a Java 8 vagy újabb verzióban:
mindkét esetben érdemes megjegyezni, hogy tulajdonságnév ütközés esetén az utolsó forrásolvasás elsőbbséget élvez.,
A/Intravénás Tulajdonságok
az Intravénás egy ingatlan, a @Érték jegyzet egyszerű:
@Value( "${jdbc.url}" )private String jdbcUrl;
Mi is megadhat egy alapértelmezett értéket az ingatlan:
@Value( "${jdbc.url:aDefaultUrl}" )private String jdbcUrl;
Az új PropertySourcesPlaceholderConfigurer ki a Tavaszi 3.1 megoldani ${…} helykitöltőt bean meghatározása az ingatlan értékét, valamint @Érték kommentárok.,
Végre, megkapjuk az ingatlan értékének használatával a Környezetet API:
@Autowiredprivate Environment env;...dataSource.setUrl(env.getProperty("jdbc.url"));
a Tulajdonságok A Tavaszi Boot
Mielőtt bemegyünk több speciális konfigurációs beállításokat a tulajdonságok, hadd töltsön el egy kis időt az új tulajdonságok támogatás a Tavaszi Csizma.
Általánosságban elmondható, hogy ez az új támogatás kevesebb konfigurációt foglal magában a standard rugóhoz képest, ami természetesen a Boot egyik fő célja.
4.1. alkalmazás.,tulajdonságok: Az alapértelmezett tulajdonságfájl
a rendszerindítás a tulajdonságfájlok konfigurációs megközelítésével kapcsolatos tipikus konvenciót alkalmazza. Ez azt jelenti, hogy egyszerűen alkalmazhatunk egy alkalmazást.tulajdonságok fájl az src / main / resources könyvtárban, majd automatikusan felismeri. Ezután minden betöltött tulajdonságot a szokásos módon injektálhatunk belőle.
tehát az alapértelmezett fájl használatával nem kell kifejezetten regisztrálnunk egy PropertySource-t, vagy akár meg is adnunk egy tulajdonságfájl elérési útját.,
futásidőben is konfigurálhatunk egy másik fájlt, ha szükséges, egy környezeti tulajdonság használatával:
java -jar app.jar --spring.config.location=classpath:/another-location.properties
a tavaszi Boot 2.3-tól a konfigurációs fájlok helyettesítő helyét is megadhatjuk.
például beállíthatjuk a rugót.config.hely tulajdonság config/*/:
java -jar app.jar --spring.config.location=config/*/
ily módon a Spring Boot olyan konfigurációs fájlokat keres, amelyek megfelelnek a konfigurációs/*/ könyvtármintának a jar fájlunkon kívül. Ez akkor hasznos,ha több konfigurációs forrásunk van.
a 2.4-es verzió óta.,0, A Spring Boot támogatja a multi-document properties fájlok használatát, hasonlóan a YAML-hez a tervezés szerint:
baeldung.customProperty=defaultValue#---baeldung.customProperty=overriddenValue
vegye figyelembe, hogy a tulajdonságfájlok esetében a három kötőjel jelölését egy megjegyzés karakter (#) előzi meg.
4.2. Környezet-specifikus tulajdonságok Fájl
ha különböző környezeteket kell megcéloznunk, van egy beépített mechanizmus a rendszerindításhoz.
egyszerűen definiálhatunk egy alkalmazáskörnyezetet.tulajdonságok fájl az src / main / resources könyvtárban, majd állítson be egy tavaszi profilt ugyanazzal a környezeti névvel.,
például, ha definiálunk egy “staging” környezetet, ez azt jelenti, hogy meg kell határoznunk egy staging profilt, majd az alkalmazás-stagingot.tulajdonságok.
Ez az env fájl betöltődik, és elsőbbséget élvez az alapértelmezett tulajdonságfájllal szemben. Ne feledje, hogy az alapértelmezett fájl továbbra is betöltődik, csak akkor, ha tulajdonság ütközés történik, a környezetspecifikus tulajdonságfájl elsőbbséget élvez.
4.3. Teszt-specifikus tulajdonságok Fájl
lehet, hogy követelményünk van a különböző tulajdonságértékek használatára is, amikor alkalmazásunk teszt alatt van.,
Spring Boot kezeli ezt számunkra keresve a src / test / resources könyvtárban egy teszt futtatása során. Ismét alapértelmezett tulajdonságok továbbra is injektálható, mint a normál, de felülírja ezeket, ha van egy ütközés.
4.4. A @TestPropertySource Megjegyzés
Ha több szemcsés ellenőrzésre van szükségünk a teszt tulajdonságai felett, akkor használhatjuk a @TestPropertySource megjegyzést.,
Ez lehetővé teszi, hogy meghatározott vizsgálati tulajdonságok egy adott vizsgálati összefüggésben figyelembe vételével az alapértelmezett tulajdonság források:
Ha nem akarjuk használni egy fájlt, akkor megadhatja nevét, valamint az értékek közvetlenül:
Mi is elérni hasonló hatást használata a tulajdonságok érv a @SpringBootTest jegyzet:
4.5. Hierarchikus Tulajdonságok
Ha a tulajdonságok, amelyek csoportosítva tudjuk használni a @ConfigurationProperties jegyzet, amely térkép ezeket a szállás hierarchiák a Java objektumok grafikonok.,
vessünk néhány tulajdonság segítségével beállíthatja, hogy egy adatbázis-kapcsolat:
database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=bar
majd használjuk a magyarázat, hogy az a térkép, hogy egy adatbázis-objektum:
a Tavasz Indító vonatkozik az egyezmény át konfigurációs megközelítés újra, automatikusan feltérképezése között tulajdon nevek a megfelelő mezőket. Minden, amit meg kell adnia az ingatlan előtag.
ha mélyebben szeretne ásni a konfigurációs tulajdonságokba, nézze meg mélyreható cikkünket.
4.6. Alternatív megoldás: a YAML Files
Spring támogatja a YAML fájlokat is.,
ugyanazok az elnevezési szabályok vonatkoznak a tesztspecifikus, környezetspecifikus és alapértelmezett tulajdonságfájlokra. Az egyetlen különbség az, hogy a fájlkiterjesztés függ attól, hogy a SnakeYAML könyvtár a classpath-on van-e.,
YAML különösen jó a hierarchikus ingatlan tároló; a következő ingatlan fájlt:
database.url=jdbc:postgresql:/localhost:5432/instancedatabase.username=foodatabase.password=barsecret: foo
szinonimája a következő YAML fájlt:
database: url: jdbc:postgresql:/localhost:5432/instance username: foo password: barsecret: foo
Azt is érdemes megemlíteni, hogy YAML fájlokat nem támogatja a @PropertySource jegyzet, úgyhogy ha ki kell használni ezt a jegyzet, ez kényszerít minket, hogy segítségével a tulajdonságokat a fájl.
egy másik figyelemre méltó pont az, hogy a 2.4.0 verzióban a Spring Boot megváltoztatta a tulajdonságok betöltésének módját a multi-document YAML fájlokból., Korábban a Hozzáadás sorrendje a profil aktiválási sorrendjén alapult. Az új verzióval azonban a keretrendszer ugyanazokat a rendelési szabályokat követi, amelyeket korábban jeleztünk .tulajdonságok fájlok; tulajdonságok alacsonyabb a fájlban egyszerűen felülírja azokat magasabb.
továbbá, ebben a verzióban a profilokat már nem lehet aktiválni a profilspecifikus dokumentumokból, így az eredmény egyértelműbbé és kiszámíthatóbbá válik.
4.7. További konfigurációs fájlok importálása
a 2.4-es verzió előtt.,0, a tavaszi indítás lehetővé tette további konfigurációs fájlok beillesztését a rugó használatával.config.helyszín és tavasz.config.további-hely tulajdonságok, de voltak bizonyos korlátozások. Például az alkalmazás megkezdése előtt meg kellett határozni őket (környezet vagy Rendszer tulajdonságai, vagy parancssori argumentumok használata), mivel azokat a folyamat elején használták.
az említett változatban a rugót használhatjuk.config.import tulajdonság az alkalmazáson belül.Tulajdonságok vagy alkalmazás.yml fájl könnyen tartalmazhat további fájlokat., Ez a szálláshely támogatja néhány érdekes tulajdonságok:
- hozzátéve, több fájlok vagy könyvtárak
- a fájlok tölthető, akár a classpath, vagy külső könyvtár
- jelzi, ha az indítási folyamat meghiúsul, ha egy fájl nem található, vagy ha az opcionális fájl
- importáló extensionless fájlok
nézzük meg egy érvényes példa:
Megjegyzés: itt formázott ez a tulajdonság segítségével sortörések csak az egyértelműség kedvéért.
tavasz a behozatalt az importnyilatkozat alá közvetlenül beillesztett új dokumentumként kezeli.
4, 8., Tulajdonságok parancssori Argumentumok
Mellesleg használata fájlok, akkor át tulajdonságok közvetlenül parancssorból:
java -jar app.jar --property="value"
Mi is ez a via rendszer tulajdonságok, amelyek a biztosított, mielőtt a -jar parancs helyett után:
java -Dproperty.name="value" -jar app.jar
4.9. A környezeti változók tulajdonságai
a tavaszi indítás a környezeti változókat is észleli, tulajdonságokként kezelve őket:
export name=valuejava -jar app.jar
4.10., A
tulajdonságértékek randomizációja ha nem akarunk determinista tulajdonságértékeket, akkor a RandomValuePropertySource-t használhatjuk a tulajdonságok értékeinek randomizálására:
random.number=${random.int}random.long=${random.long}random.uuid=${random.uuid}
4.11. További típusú tulajdonság források
tavaszi Boot támogatja számos ingatlan források, végrehajtási egy jól átgondolt rendelés, hogy ésszerű felülbíráló. Érdemes konzultálni a hivatalos dokumentációval, amely túlmutat a cikk hatókörén.,
configuration using Raw Beans – The PropertySourcesPlaceholderConfigurer
a Tulajdonságok tavaszba való bejutásának kényelmes módszerei mellett manuálisan is meghatározhatjuk és regiterálhatjuk a tulajdonságkonfigurációs babot.
a PropertySourcesPlaceholderConfigurer-rel való együttműködés teljes ellenőrzést biztosít a konfiguráció felett, azzal a hátrányával, hogy verbózabb, az idő nagy részében felesleges.,
lássuk, hogyan definiálhatjuk ezt a babot Java konfigurációval:
tulajdonságok szülő-gyermek kontextusban
Ez a kérdés újra és újra felmerül: mi történik, ha webalkalmazásunkban van szülő és gyermek kontextus? A szülő kontextusban lehet néhány közös alapfunkció és bab, majd egy (vagy több) gyermek kontextusban, talán tartalmazó servlet-specifikus bab.
ebben az esetben mi a legjobb módja annak, hogy meghatározzuk a tulajdonságfájlokat, és bevonjuk őket ezekben a kontextusokban? Hogyan lehet ezeket a tulajdonságokat legjobban tavasszal letölteni?
egyszerű bontást adunk.,
Ha a fájl a szülő kontextusában van definiálva:
- @Value a gyermek kontextusában működik: igen
- @ Value a szülő kontextusában működik: igen
- környezet.getProperty a gyermek kontextusában: igen
- környezet.getProperty szülő kontextusban: igen
Ha a fájl a gyermek kontextusában van meghatározva:
- @Value működik a gyermek kontextusában: igen
- @Value működik a szülői kontextusban: nem
- környezet.getProperty a gyermek kontextusában: igen
- környezet.,Getproperty in Parent context: NO
következtetés
Ez a cikk több példát mutatott a tulajdonságok és tulajdonságok fájlok tavaszi kezelésére.
mint mindig, a cikket támogató teljes kód elérhető a GitHub-on.
Kezdje a tavaszi 5-ös és a tavaszi Boot 2-vel A Learn Spring tanfolyamon keresztül:
> >