Introduksjon til Netflix Archaius med Spring Cloud

1. Oversikt

Netflix Archaius er et kraftig bibliotek for konfigurasjonsadministrasjon.

Enkelt sagt, det er et rammeverk som kan brukes til å samle konfigurasjonsegenskaper fra mange forskjellige kilder, og gir rask, trådsikker tilgang til dem.

På toppen av dette lar biblioteket egenskapene endres dynamisk ved kjøretid, noe som gjør det mulig for systemet å få disse variantene uten å måtte starte programmet på nytt.

I denne innledende opplæringen vil vi sette opp en enkel Spring Cloud Archaius-konfigurasjon, vi vil forklare hva som skjer under panseret, og til slutt vil vi se hvordan Spring tillater å utvide det grunnleggende oppsettet.

2. Netflix Archaius-funksjoner

Som vi vet, tilbyr Spring Boot allerede instrumenter for å administrere eksternaliserte konfigurasjoner, så hvorfor bry seg med å sette opp en annen mekanisme?

Vi vil, Archaius tilbyr noen nyttige og interessante funksjoner som ikke er tenkt på av andre konfigurasjonsrammer. Noen av hovedpunktene er:

  • Dynamiske og typede egenskaper
  • En tilbakekallingsmekanisme som blir påkalt på eiendomsmutasjoner
  • Klar til bruk implementeringer av dynamiske konfigurasjonskilder som URL-er, JDBC og Amazon DynamoDB
  • En JMX MBean som er tilgjengelig med Spring Boot Actuator eller JConsole for å inspisere og manipulere egenskapene
  • Validering av dynamiske egenskaper

Disse fordelene kan være fordelaktige i mange scenarier.

Derfor har Spring Cloud jobbet med et bibliotek som gjør det enkelt å konfigurere en 'Spring Environment Bridge' slik at Archaius kan lese egenskaper fra Spring Environment.

3. Avhengigheter

La oss legge til vår-sky-start-netflix-archaius til søknaden vår, vil den legge til alle nødvendige avhengigheter i prosjektet vårt.

Eventuelt kan vi også legge til vår-sky-netflix til vår avhengighetLedelse delen og stole på spesifikasjonen av versjonene av gjenstandene:

  org.springframework.cloud spring-cloud-starter-netflix-archaius org.springframework.cloud spring-cloud-netflix 2.0.1.RELEASE pom import 

Merk: vi kan sjekke Maven Central for å bekrefte at vi bruker den nyeste versjonen av startbiblioteket.

4. Bruk

Når vi har lagt til den nødvendige avhengigheten, får vi tilgang til egenskapene som administreres av rammeverket:

DynamicStringProperty dynamicProperty = DynamicPropertyFactory.getInstance () .getStringProperty ("baeldung.archaius.property", "standardverdi"); String propertyCurrentValue = dynamicProperty.get ();

La oss jobbe med et kort eksempel for å se hvordan dette er tilgjengelig rett utenfor boksen.

4.1. Raskt eksempel

Som standard administrerer den dynamisk alle egenskapene som er definert i en fil som heter config.properties i applikasjonens klassesti.

Så la oss legge det til i ressursmappen vår med noen vilkårlige egenskaper:

# config.properties baeldung.archaius.properties.one = en FRA: config.properties

Nå trenger vi en måte å sjekke eiendommenes verdier til når som helst. I dette tilfellet oppretter vi en RestController som henter verdiene som et JSON-svar:

@RestController offentlig klasse ConfigPropertiesController {private DynamicStringProperty propertyOneWithDynamic = DynamicPropertyFactory.getInstance () .getStringProperty ("baeldung.archaius.properties.one", "ikke funnet!"); @GetMapping ("/ property-from-dynamic-management") offentlig streng getPropertyValue () {return propertyOneWithDynamic.getName () + ":" + propertyOneWithDynamic.get (); }}

La oss prøve det. Vi kan sende en forespørsel til dette endepunktet, og tjenesten vil hente verdiene som er lagret i config.properties som forventet.

Ingen stor sak så langt, ikke sant? Ok, la oss fortsette og endre verdiene til eiendommen i classpath-filen uten å starte tjenesten på nytt. Som et resultat, etter et minutt eller så, bør et anrop til sluttpunktet hente de nye verdiene. Ganske kult, ikke sant?

Deretter prøver vi å forstå hva som skjer under panseret.

5. Hvordan fungerer det?

La oss først prøve å forstå det store bildet.

Archaius er en utvidelse av Apache's Commons Configuration-bibliotek, og legger til noen fine funksjoner som et valgrammeverk for dynamiske kilder, med høy gjennomstrømning og trådsikker implementering.

De vår-sky-netflix-archaius Biblioteket kommer da inn i spillet, sammenslåing av alle de forskjellige eiendomskildene, og automatisk konfigurering av Archaius-verktøyene med disse kildene.

5.1. Netflix Archaius-biblioteket

Den definerer en sammensatt konfigurasjon, en samling av forskjellige konfigurasjoner hentet fra forskjellige kilder.

I tillegg kan det hende at noen av disse konfigurasjonskildene støtter polled i løpetid for endringer. Archaius tilbyr grensesnitt og noen forhåndsdefinerte implementeringer for å konfigurere denne typen kilder.

Samlingen av kilder er hierarkisert slik at hvis en eiendom er tilstede i flere konfigurasjoner, vil den endelige verdien være den i det øverste sporet.

Til slutt, a ConfigurationManager håndterer hele systemkonfigurasjons- og distribusjonskonteksten. Den kan installere den endelige komposittkonfigurasjonen, eller hente den installerte for modifikasjon.

5.2. Spring Cloud Support

Hovedoppgaven til Spring Cloud Archaius-biblioteket er å slå sammen alle de forskjellige konfigurasjonskildene som en ConcurrentCompositeConfiguration og installer den ved hjelp av ConfigurationManager.

Prioriteten i hvilken biblioteket definerer kildene er:

  1. Enhver vanlig Apache-konfigurasjon Abstrakt Konfigurasjon bønne definert i sammenhengen
  2. Alle kildene som er definert i Autotråd Vår Konfigurerbart miljø
  3. Standard Archaius-kilder, som vi så i eksemplet ovenfor
  4. Apache er Systemkonfigurasjon og Miljø Konfigurasjon kilder

En annen nyttig funksjon dette Spring Cloud-biblioteket gir, er definisjonen av en aktuator Endepunkt å overvåke og samhandle med egenskapene. Dens bruk er utenfor omfanget av denne opplæringen.

6. Tilpasse og utvide Archaius-konfigurasjonen

Nå som vi har bedre forståelse av hvordan Archaius fungerer, er vi i god form til å analysere hvordan vi kan tilpasse konfigurasjonen til vår applikasjon, eller hvordan vi kan utvide funksjonaliteten ved hjelp av konfigurasjonskildene våre.

6.1. Archaius-støttede konfigurasjonsegenskaper

Hvis vi vil at Archaius skal ta hensyn til andre konfigurasjonsfiler som ligner på config.properties en, vi kan definere archaius.configurationSource.additionalUrls systemegenskap.

Verdien analyseres til en liste over nettadresser atskilt med komma, slik at vi for eksempel kan legge til denne systemegenskapen når vi starter applikasjonen:

-Darchaius.configurationSource.additionalUrls = "classpath: other-dir / extra.properties, file: ///home/user/other-extra.properties"

Archaius vil lese config.properties filen først, og deretter de andre, i den angitte rekkefølgen. På grunn av dette vil egenskapene som er definert i sistnevnte filer, ha prioritet fremfor de tidligere.

Det er et par andre systemegenskaper vi kan bruke til å konfigurere forskjellige aspekter av Archaius standardkonfigurasjon:

  • archaius.configurationSource.defaultFileName: standard konfigurasjonsfilnavn i klassestien
  • archaius.fixedDelayPollingScheduler.initialDelayMills: innledende forsinkelse før du leser konfigurasjonskilden
  • archaius.fixedDelayPollingScheduler.delayMills: forsinkelse mellom to kildelesninger; standardverdien er 1 minutt

6.2. Legge til flere konfigurasjonskilder med våren

Hvordan kan vi legge til en annen konfigurasjonskilde som skal styres av det beskrevne rammeverket? Og hvordan kunne vi håndtere dynamiske egenskaper med høyere prioritet enn de som er definert i vårmiljøet?

Gjennomgang av det vi nevnte i avsnitt 4.2, kan vi innse at de høyeste konfigurasjonene i den sammensatte konfigurasjonen definert av våren er Abstrakt Konfigurasjon bønner definert i sammenhengen.

Og dermed, alt vi trenger å gjøre er å legge til en implementering av denne Apache-abstrakte klassen i vårkonteksten ved hjelp av noe av funksjonaliteten som Archaius gir, og vårens autokonfigurasjon vil spontant legge den til de administrerte konfigurasjonsegenskapene.

For å holde ting enkelt, ser vi et eksempel der vi konfigurerer en egenskapsfil som ligner på standard config.properties men med forskjellen mellom å ha høyere prioritet enn resten av vårmiljøet og applikasjonsegenskapene:

@Bean public AbstractConfiguration addApplicationPropertiesSource () {URL configPropertyURL = (new ClassPathResource ("other-config.properties")). GetURL (); PolledConfigurationSource source = new URLConfigurationSource (configPropertyURL); returner ny DynamicConfiguration (kilde, ny FixedDelayPollingScheduler ()); }

Heldig for oss, den vurderer flere konfigurasjonskilder som vi kan sette opp med nesten ingen anstrengelse. Konfigurasjonen deres er utenfor omfanget av denne innledende opplæringen.

7. Konklusjon

For å oppsummere har vi lært om Archaius og noen av de kule funksjonene den tilbyr for å dra nytte av konfigurasjonsadministrasjon.

Vi så også hvordan Spring Cloud autokonfigurasjonsbiblioteket spiller inn, slik at vi kan bruke dette bibliotekets API enkelt.

Nok en gang kan vi finne alle eksemplene som vises i denne opplæringen, og andre i Github-repoen.


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