A tavaszi @ConditionalOnProperty kommentár
1. Áttekintés
Ebben a rövid bemutatóban rávilágítunk a főre célja a @ConditionalOnProperty annotáció.
Először is kezdünk egy kis háttérrel arról, hogy mit @ConditionalOnProperty van. Ezután megnézünk néhány gyakorlati példát, amelyek segítenek megérteni, hogyan működik és milyen funkciókat tartalmaz.
2. A cél @ConditionalOnProperty
Általában a tavaszi alkalmazások fejlesztésekor szükségünk lehet néhány bab létrehozására feltételesen a konfigurációs tulajdonság jelenléte és értéke alapján.
Például érdemes regisztrálni a Adatforrás Bean, hogy mutasson egy produkcióra vagy egy teszt adatbázisra, attól függően, hogy a tulajdonság értékét „prod” vagy „test” értékre állítjuk-e.
Szerencsére ennek elérése nem olyan nehéz, mint első pillantásra tűnhet. A tavaszi keret biztosítja a @ConditionalOnProperty annotáció pontosan erre a célra.
Röviden, a @ConditionalOnProperty A bab regisztrálását csak akkor engedélyezi, ha egy környezeti tulajdonság jelen van és meghatározott értékkel rendelkezik. Alapértelmezés szerint a megadott tulajdonságot meg kell határozni, és nem egyenlő ezzel hamis.
Most, hogy megismertük a @ConditionalOnProperty annotáció, ássunk mélyebben, hogy lássuk, hogyan működik.
3. Az @ConditionalOnProperty Megjegyzés a gyakorlatban
Például a @ConditionalOnProperty, kifejlesztünk egy alap értesítési rendszert. Tegyük fel, hogy a dolgok egyszerűsítése érdekében e-mailes értesítéseket akarunk küldeni.
Először is létre kell hoznunk egy egyszerű szolgáltatást értesítési üzenet küldéséhez. Például vegye figyelembe a NotificationSender felület:
nyilvános felület NotificationSender {String send (String üzenet); }
Ezután adjuk meg a NotificationSender felület az e-mailjeink elküldéséhez:
public class EmailNotification megvalósítja az NotificationSender {@Orride public String send (String message) {return "Email Notification:" + üzenet; }}
Most nézzük meg, hogyan lehet használni a @ConditionalOnProperty annotáció. Konfiguráljuk a NotificationSender babot oly módon, hogy csak akkor töltődik be, ha az ingatlan értesítés.szolgáltatás meg van határozva:
@Bean (név = "emailNotification") @ConditionalOnProperty (előtag = "értesítés", név = "szolgáltatás") public NotificationSender notificationSender () {return new EmailNotification (); }
Mint láthatjuk, a előtag és név attribútumokkal jelöljük az ellenőrizni kívánt konfigurációs tulajdonságot.
Végül hozzá kell adnunk a puzzle utolsó hiányzó darabját. Definiáljuk egyéni tulajdonságunkat a alkalmazás.tulajdonságok fájl:
értesítés.szolgáltatás = e-mail
4. Speciális konfiguráció
Mint már megtudtuk, a @ConditionalOnProperty az annotáció lehetővé teszi számunkra, hogy a babot feltételesen regisztráljuk, a konfigurációs tulajdonság meglététől függően.
Ezzel a megjegyzéssel azonban nem csak ezt tehetjük. Tehát, fedezzük fel!
Tegyük fel, hogy egy másik értesítési szolgáltatást szeretnénk felvenni - például egy olyan szolgáltatást, amely lehetővé teszi számunkra, hogy SMS-értesítéseket küldjünk.
Ehhez létre kell hoznunk egy másikat NotificationSender végrehajtás:
public class SmsNotification megvalósítja a NotificationSender {@Orride public String send (String message) {return "SMS Notification:" + üzenet; }}
Mivel két megvalósításunk van, nézzük meg, hogyan tudjuk használni @ConditionalOnProperty hogy betöltse a jobboldalt NotificationSender bab feltételesen.
Ebből a célból az annotáció biztosítja a havingValue tulajdonság. Nagyon érdekes, aztmeghatározza azt az értéket, amelynek egy tulajdonságnak rendelkeznie kell ahhoz, hogy egy adott bab hozzáadódjon a Spring tárolóhoz.
Most adjuk meg, hogy milyen feltétel mellett kívánjuk regisztrálni SmsNotification végrehajtás a kontextusban:
@Bean (név = "smsNotification") @ConditionalOnProperty (előtag = "értesítés", név = "szolgáltatás", havingValue = "sms") nyilvános NotificationSender notificationSender2 () {return new SmsNotification (); }
A segítségével havingValue attribútum, világossá tettük, hogy be akarunk tölteni SmsNotification csak akkor, ha értesítés.szolgáltatás értékre van állítva sms.
Érdemes ezt megemlíteni @ConditionalOnProperty van egy másik attribútuma matchIfMissing. Ez az attribútum határozza meg, hogy a feltételnek egyeznie kell-e abban az esetben, ha a tulajdonság nem érhető el.
Most rakjuk össze az összes darabot, és írjunk egy egyszerű tesztesetet, hogy megerősítsük, hogy minden a várt módon működik:
@Test public void whenValueSetToEmail_thenCreateEmailNotification () {this.contextRunner.withPropertyValues ("notification.service = email") .withUserConfiguration (NotificationConfig.class) .run (context -> {assertThat (context) .hasBean ("email"; = context.getBean (EmailNotification.class); assertThat (notificationSender.send ("Hello From Baeldung!")). isEqualTo ("Email Notification: Hello From Baeldung!"); assertThat (context) .doesNotHaveBean ("smsNotification"); }); }
5. Következtetés
Ebben a rövid bemutatóban kiemeltük a @ConditionalOnProperty annotáció. Ezután egy gyakorlati példán keresztül bemutattuk, hogyan lehet felhasználni a tavaszi bab feltételes betöltésére.
Mint mindig, az oktatóanyag teljes forráskódja elérhető a GitHubon.