Bilješka proljeća @ConditionalOnProperty

1. Pregled

U ovom kratkom vodiču osvijetlit ćemo glavno svrha @ConditionalOnProperty bilješka.

Prvo ćemo započeti s malo pozadine o čemu @ConditionalOnProperty je. Zatim ćemo pogledati nekoliko praktičnih primjera kako bismo razumjeli kako to funkcionira i koje značajke donosi.

2. Svrha @ConditionalOnProperty

Tipično, kada razvijate proljetne programe, možda ćemo trebati stvoriti neki grah uvjetno na temelju prisutnosti i vrijednosti svojstva konfiguracije.

Na primjer, možda ćemo htjeti registrirati Izvor podataka bean da upućuje na produkcijsku ili testnu bazu podataka, ovisno o tome postavimo li vrijednost svojstva na "prod" ili "test".

Srećom, postići to nije tako teško kao što bi moglo izgledati na prvi pogled. Proljetni okvir pruža @ConditionalOnProperty napomena upravo u tu svrhu.

Ukratko, @ConditionalOnProperty omogućuje registraciju graha samo ako je svojstvo okoline prisutno i ima određenu vrijednost. Prema zadanim postavkama navedeno svojstvo mora biti definirano i ne mora biti jednako lažno.

Sad kad smo upoznati sa svrhom @ConditionalOnProperty napomena, kopajmo dublje da vidimo kako to funkcionira.

3. The @ConditionalOnProperty Bilješka u praksi

Kao primjer upotrebe @ConditionalOnProperty, razvit ćemo osnovni sustav obavijesti. Da stvar za sada bude jednostavna, pretpostavimo da želimo slati obavijesti e-poštom.

Prvo ćemo morati stvoriti jednostavnu uslugu za slanje obavijesti. Na primjer, razmotrite NotificationSender sučelje:

javno sučelje NotificationSender {String send (String message); }

Dalje, pružimo primjenu NotificationSender sučelje za slanje naše e-pošte:

javna klasa EmailNotification implementira NotificationSender {@Override public String send (String message) {return "Email Notification:" + poruka; }}

Sada, da vidimo kako iskoristiti @ConditionalOnProperty bilješka. Konfigurirajmo NotificationSender grah na takav način da će se učitati samo ako je svojstvo obavijest.usluga je definirano:

@Bean (name = "emailNotification") @ConditionalOnProperty (prefix = "notification", name = "service") public NotificationSender notificationSender () {return new EmailNotification (); }

Kao što vidimo, prefiks i Ime atributi se koriste za označavanje konfiguracijskog svojstva koje treba provjeriti.

Na kraju, moramo dodati posljednji dio slagalice koji nedostaje. Definirajmo svoje prilagođeno svojstvo u primjena.svojstva datoteka:

notification.service = e-pošta

4. Napredna konfiguracija

Kao što smo već naučili, @ConditionalOnProperty anotacija nam omogućuje da grah registriramo uvjetno, ovisno o prisutnosti konfiguracijskog svojstva.

Međutim, s ovom bilješkom možemo učiniti i više od toga. Pa, istražimo!

Pretpostavimo da želimo dodati još jednu uslugu obavijesti - na primjer, uslugu koja će nam omogućiti slanje SMS obavijesti.

Da bismo to učinili, moramo stvoriti drugu NotificationSender provedba:

javna klasa SmsNotification implementira NotificationSender {@Override public String send (String message) {return "SMS Notification:" + poruka; }}

Budući da imamo dvije implementacije, pogledajmo kako se možemo koristiti @ConditionalOnProperty učitati desno NotificationSender grah uvjetno.

U tu svrhu, napomena daje imaVrijednost atribut. Vrlo zanimljivo, todefinira vrijednost koju svojstvo mora imati da bi se određeni grah mogao dodati u spremnik Spring.

Sada, navedimo pod kojim uvjetom želimo registrirati SmsNotification provedba u kontekstu:

@Bean (name = "smsNotification") @ConditionalOnProperty (prefix = "notification", name = "service", havingValue = "sms") javni NotificationSender notificationSender2 () {return new SmsNotification (); }

Uz pomoć imaVrijednost atribut, jasno smo stavili do znanja da se želimo učitati SmsNotification samo kad obavijest.usluga postavljeno je na sms.

Vrijedno je to spomenuti @ConditionalOnProperty ima još jedan atribut koji se naziva matchIfMissing. Ovaj atribut određuje treba li se uvjet podudarati u slučaju da svojstvo nije dostupno.

Sad, spojimo sve dijelove i napišite jednostavan test kako bismo potvrdili da sve funkcionira kako se očekivalo:

@Test public void whenValueSetToEmail_thenCreateEmailNotification () {this.contextRunner.withPropertyValues ​​("notification.service = email") .withUserConfiguration (NotificationConfig.class) .run (context -> {assertThat (context) .hasBetification (email). = context.getBean (EmailNotification.class); assertThat (notificationSender.send ("Hello from Baeldung!")). isEqualTo ("Email Notification: Hello From Baeldung!"); assertThat (context) .doesNotHaveBean ("smsNotification"); }); }

5. Zaključak

U ovom kratkom vodiču istakli smo svrhu korištenja @ConditionalOnProperty bilješka. Zatim smo kroz praktični primjer prikazali kako se njime uvjetno učitava proljetni grah.

Kao i uvijek, puni izvorni kod ovog vodiča dostupan je na GitHub-u.


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