Uvod u Netflix Archaius s Spring Cloudom

1. Pregled

Netflix Archaius je moćna knjižnica za upravljanje konfiguracijama.

Jednostavno rečeno, to je okvir koji se može koristiti za prikupljanje konfiguracijskih svojstava iz mnogih različitih izvora, nudeći brz i siguran pristup njima.

Povrh svega, knjižnica omogućuje svojstva da se dinamički mijenjaju tijekom izvođenja, što omogućava sustavu da dobije te varijacije bez potrebe za ponovnim pokretanjem aplikacije.

U ovom uvodnom vodiču postavit ćemo jednostavnu konfiguraciju Spring Cloud Archaius, objasnit ćemo što se događa ispod haube i na kraju ćemo vidjeti kako Spring dopušta proširivanje osnovnih postavki.

2. Netflix Archaius značajke

Kao što znamo, Spring Boot već nudi instrumente za upravljanje eksternaliziranim konfiguracijama, pa zašto se onda mučiti s postavljanjem drugačijeg mehanizma?

Dobro, Archaius nudi neke korisne i zanimljive značajke koje ne promišlja niti jedan drugi konfiguracijski okvir. Neke od njegovih ključnih točaka su:

  • Dinamička i tipizirana svojstva
  • Mehanizam povratnog poziva koji se poziva na mutacije svojstva
  • Spremne za upotrebu implementacije dinamičkih izvora konfiguracije kao što su URL-ovi, JDBC i Amazon DynamoDB
  • JMX MBean kojem može pristupiti Spring Boot Actuator ili JConsole za pregled i upravljanje svojstvima
  • Provjera dinamičkih svojstava

Te pogodnosti mogu biti korisne u mnogim scenarijima.

Stoga je Spring Cloud radio na biblioteci koja omogućuje jednostavno konfiguriranje "Spring Spring Bridge" tako da Archaius može čitati svojstva iz Spring Environmenta.

3. Ovisnosti

Dodajmo i proljeće-oblak-starter-netflix-archaius našoj aplikaciji, on će dodati sve potrebne ovisnosti našem projektu.

Po želji možemo i dodati proljeće-oblak-netflix našem ovisnostUpravljanje odjeljak i osloniti se na njegovu specifikaciju verzija artefakata:

  org.springframework.cloud proljeće-oblak-starter-netflix-archaius org.springframework.cloud proljeće-oblak-netflix 2.0.1.OBLAŽENJE pom import 

Napomena: možemo provjeriti Maven Central kako bismo provjerili koristimo li najnoviju verziju početne knjižnice.

4. Upotreba

Nakon što dodamo potrebnu ovisnost, moći ćemo pristupiti svojstvima kojima upravlja okvir:

DynamicStringProperty dynamicProperty = DynamicPropertyFactory.getInstance () .getStringProperty ("baeldung.archaius.property", "zadana vrijednost"); Niz propertyCurrentValue = dynamicProperty.get ();

Poradimo na kratkom primjeru kako bismo vidjeli kako je to dostupno odmah izravno.

4.1. Brzi primjer

Prema zadanim postavkama, dinamički upravlja svim svojstvima definiranim u datoteci s imenom config.properties u stazi predavanja aplikacije.

Dakle, dodajte ga u našu mapu resursa s nekim proizvoljnim svojstvima:

# config.properties baeldung.archaius.properties.one = jedan OD: config.properties

Sada ćemo trebati način provjere vrijednosti svojstava u bilo kojem određenom trenutku. U ovom ćemo slučaju stvoriti RestController koji dohvaća vrijednosti kao JSON odgovor:

@RestController javna klasa ConfigPropertiesController {private DynamicStringProperty propertyOneWithDynamic = DynamicPropertyFactory.getInstance () .getStringProperty ("baeldung.archaius.properties.one", "not found!"); @GetMapping ("/ property-from-dynamic-management") javni niz getPropertyValue () {return propertyOneWithDynamic.getName () + ":" + propertyOneWithDynamic.get (); }}

Isprobajmo. Na ovu krajnju točku možemo poslati zahtjev, a usluga će dohvatiti vrijednosti pohranjene u config.properties kako se očekivalo.

Zasad nije velika stvar, zar ne? Ok, idemo dalje i promijenimo vrijednosti svojstva u datoteci classpath, bez ponovnog pokretanja usluge. Kao rezultat, nakon minute ili nešto više, poziv krajnjoj točki trebao bi dohvatiti nove vrijednosti. Prilično cool, zar ne?

Dalje, pokušat ćemo shvatiti što se događa ispod haube.

5. Kako to djeluje?

Prije svega, pokušajmo shvatiti širu sliku.

Archaius je proširenje biblioteke Apache's Commons Configuration, dodajući neke lijepe značajke poput okvira za glasanje za dinamičke izvore, s velikom propusnošću i implementacijom sigurnom u nitima.

The proljeće-oblak-netflix-arhaj Biblioteka tada dolazi u obzir, spajajući sve različite izvore svojstava i automatski konfigurirajući Archaius alate s tim izvorima.

5.1. Knjižnica Netflix Archaius

Djeluje definirajući kompozitnu konfiguraciju, zbirku različitih konfiguracija dobivenih iz različitih izvora.

Štoviše, neki od tih izvora konfiguracije mogli bi podržati anketiranje za vrijeme promjena u vrijeme izvođenja. Archaius nudi sučelja i neke unaprijed definirane implementacije za konfiguriranje ove vrste izvora.

Zbirka izvora hijerarhizirana je tako da će, ako je svojstvo prisutno u više konfiguracija, konačna vrijednost biti ona u najvišem utoru.

Konačno, a ConfigurationManager obrađuje kontekst konfiguracije i implementacije na cijelom sustavu. Može instalirati konačnu kompozitnu konfiguraciju ili dohvatiti instaliranu za izmjenu.

5.2. Podrška za proljetni oblak

Glavni zadatak knjižnice Spring Cloud Archaius je spojiti sve različite konfiguracijske izvore kao ConcurrentCompositeConfiguration i instalirajte ga pomoću ConfigurationManager.

Redoslijed prioriteta u kojem knjižnica definira izvore je:

  1. Bilo koja uobičajena konfiguracija Apachea SažetakKonfiguracija grah definiran u kontekstu
  2. Svi izvori definirani u Automatski ožičen Proljeće Podesivo okruženje
  3. Zadani Arhaijevi izvori, što smo vidjeli u gornjem primjeru
  4. Apacheov Sistemska konfiguracija i Konfiguracija okoliša izvori

Još jedna korisna značajka koju nudi knjižnica Spring Cloud je definicija aktuatora Krajnja točka za praćenje i interakciju sa svojstvima. Njegova upotreba izvan je opsega ovog vodiča.

6. Prilagođavanje i proširivanje Arhaijeve konfiguracije

Sad kad smo bolje razumjeli kako Archaius djeluje, u dobroj smo formi da analiziramo kako prilagoditi konfiguraciju našoj aplikaciji ili kako proširiti funkcionalnost koristeći naše konfiguracijske izvore.

6.1. Archaius podržana konfiguracijska svojstva

Ako želimo da Archaius uzme u obzir druge konfiguracijske datoteke slične config.properties jedan, možemo definirati archaius.configurationSource.additionalUrls svojstvo sustava.

Vrijednost se raščlanjuje na popis URL-ova odvojenih zarezom, tako da, na primjer, možemo dodati ovo svojstvo sustava kada pokrenemo aplikaciju:

-Darchaius.configurationSource.additionalUrls = "put do klase: other-dir / extra.properties, datoteka: ///home/user/other-extra.properties"

Archaius će pročitati config.properties prvo datoteku, a zatim i ostale, navedenim redoslijedom. Zbog toga će svojstva definirana u potonjim datotekama imati prioritet u odnosu na prethodna.

Postoji nekoliko drugih svojstava sustava koje možemo koristiti za konfiguriranje različitih aspekata zadane konfiguracije Archaiusa:

  • archaius.configurationSource.defaultFileName: zadani naziv datoteke konfiguracije u stazi razreda
  • archaius.fixedDelayPollingScheduler.initialDelayMills: početno kašnjenje prije čitanja izvora konfiguracije
  • archaius.fixedDelayPollingScheduler.delayMills: kašnjenje između dva čitanja izvora; zadana vrijednost je 1 minuta

6.2. Dodavanje dodatnih izvora konfiguracije s Springom

Kako bismo mogli dodati drugačiji izvor konfiguracije kojim će se upravljati opisanim okvirom? I kako bismo mogli upravljati dinamičkim svojstvima s većim prioritetom od onih definiranih u proljetnom okruženju?

Pregledavajući ono što smo spomenuli u odjeljku 4.2, možemo shvatiti da su najviše konfiguracije u kompozitnoj konfiguraciji definirane Springom SažetakKonfiguracija grah definiran u kontekstu.

Tako, sve što trebamo učiniti je dodati implementaciju ove Apacheove apstraktne klase u naš Spring Context koristeći neke od funkcija koje pruža Archaius, a autoconfiguracija Springa spontano će je dodati u svojstva upravljane konfiguracije.

Da stvari budu jednostavne, vidjet ćemo primjer gdje konfiguriramo datoteku svojstava sličnu zadanoj config.properties ali s razlikom što imaju veći prioritet od ostatka Spring okruženja i svojstava aplikacije:

@Bean public AbstractConfiguration addApplicationPropertiesSource () {URL configPropertyURL = (new ClassPathResource ("other-config.properties")). GetURL (); PolledConfigurationSource izvor = novi URLConfigurationSource (configPropertyURL); vrati novu DynamicConfiguration (izvor, novi FixedDelayPollingScheduler ()); }

Srećom po nas, razmatra nekoliko izvora konfiguracije koje možemo postaviti gotovo bez truda. Njihova je konfiguracija izvan opsega ovog uvodnog vodiča.

7. Zaključak

Da rezimiramo, naučili smo o Archaiusu i nekim sjajnim značajkama koje nudi kako bismo iskoristili prednost upravljanja konfiguracijom.

Također, vidjeli smo kako u igru ​​ulazi knjižnica za automatsku konfiguraciju Spring Cloud koja nam omogućava praktičnu upotrebu API-ja ove biblioteke.

Još jednom možemo pronaći sve primjere prikazane u ovom vodiču i ostale u našem Github repo-u.