Introduktion til Netflix Archaius med Spring Cloud

1. Oversigt

Netflix Archaius er et kraftfuldt konfigurationsstyringsbibliotek.

Kort sagt, det er en ramme, der kan bruges til at samle konfigurationsegenskaber fra mange forskellige kilder, hvilket giver hurtig, trådsikker adgang til dem.

Oven i dette tillader biblioteket egenskaber at ændre sig dynamisk ved kørsel, hvilket gør det muligt for systemet at få disse variationer uden at skulle genstarte applikationen.

I denne introduktionsvejledning opretter vi en simpel Spring Cloud Archaius-konfiguration, vi forklarer, hvad der sker under emhætten, og endelig ser vi, hvordan Spring tillader udvidelse af den grundlæggende opsætning.

2. Netflix Archaius-funktioner

Som vi ved, leverer Spring Boot allerede instrumenter til styring af eksternaliserede konfigurationer, så hvorfor gider at opsætte en anden mekanisme?

Godt, Archaius tilbyder nogle praktiske og interessante funktioner, der ikke overvejes af nogen anden konfigurationsramme. Nogle af dens nøglepunkter er:

  • Dynamiske og typede egenskaber
  • En tilbagekaldelsesmekanisme, der påberåbes på ejendomsmutationer
  • Klar til brug implementeringer af dynamiske konfigurationskilder såsom URL'er, JDBC og Amazon DynamoDB
  • En JMX MBean, der er tilgængelig med Spring Boot Actuator eller JConsole for at inspicere og manipulere egenskaberne
  • Validering af dynamiske egenskaber

Disse frynsegoder kan være gavnlige i mange scenarier.

Derfor har Spring Cloud arbejdet på et bibliotek, der gør det let at konfigurere en 'Spring Environment Bridge', så Archaius kan læse egenskaber fra Spring Environment.

3. Afhængigheder

Lad os tilføje spring-cloud-starter-netflix-archaius til vores ansøgning tilføjer det alle de nødvendige afhængigheder til vores projekt.

Eventuelt kan vi også tilføje forår-sky-netflix til vores afhængighedLedelse afsnit og stole på dens specifikation af versionerne af artefakterne:

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

Bemærk: Vi kan tjekke Maven Central for at bekræfte, at vi bruger den nyeste version af startbiblioteket.

4. Anvendelse

Når vi tilføjer den krævede afhængighed, kan vi få adgang til de ejendomme, der administreres af rammen:

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

Lad os arbejde på et kort eksempel for at se, hvordan dette er tilgængeligt lige uden for kassen.

4.1. Hurtigt eksempel

Som standard administrerer den dynamisk alle de egenskaber, der er defineret i en fil med navnet config.egenskaber i applikationens klassesti.

Så lad os tilføje det til vores ressourcemappe med nogle vilkårlige egenskaber:

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

Nu har vi brug for en måde at kontrollere egenskabernes værdier på et bestemt tidspunkt. I dette tilfælde opretter vi en RestController der henter værdierne som et JSON-svar:

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

Lad os prøve det. Vi kan sende en anmodning til dette slutpunkt, og tjenesten vil hente de værdier, der er gemt i config.egenskaber som forventet.

Ingen big deal indtil videre, ikke? Ok, lad os fortsætte og ændre værdierne for ejendommen i classpath-filen uden at genstarte tjenesten. Som et resultat, efter et minut eller deromkring, skal et opkald til slutpunktet hente de nye værdier. Temmelig sejt, ikke?

Dernæst prøver vi at forstå, hvad der foregår under emhætten.

5. Hvordan fungerer det?

Lad os først og fremmest forsøge at forstå det store billede.

Archaius er en udvidelse af Apache's Commons Configuration-bibliotek og tilføjer nogle gode funktioner som en afstemningsramme til dynamiske kilder med høj kapacitet og trådsikker implementering.

Det forår-sky-netflix-archaius bibliotek kommer derefter i spil, fletning af alle de forskellige egenskabskilder og automatisk konfiguration af Archaius-værktøjerne med disse kilder.

5.1. Netflix Archaius-biblioteket

Det fungerer ved at definere en sammensat konfiguration, en samling af forskellige konfigurationer opnået fra forskellige kilder.

Desuden understøtter nogle af disse konfigurationskilder muligvis polling ved kørsel for ændringer. Archaius leverer grænseflader og nogle foruddefinerede implementeringer for at konfigurere disse typer kilder.

Kildesamlingen er hierarkiseret, så hvis en egenskab er til stede i flere konfigurationer, vil den endelige værdi være den i den øverste plads.

Endelig a ConfigurationManager håndterer den systemomfattende konfiguration og implementeringskontekst. Det kan installere den endelige sammensatte konfiguration eller hente den installerede til ændring.

5.2. Spring Cloud Support

Spring Cloud Archaius-bibliotekets hovedopgave er at flette alle de forskellige konfigurationskilder som en ConcurrentCompositeConfiguration og installer det ved hjælp af ConfigurationManager.

Rækkefølgen, hvor biblioteket definerer kilderne, er:

  1. Enhver almindelig Apache-konfiguration Abstrakt konfiguration bønne defineret i sammenhængen
  2. Alle kilder defineret i Autotråd Forår Konfigurerbart miljø
  3. Standard Archaius-kilder, som vi så i eksemplet ovenfor
  4. Apache's System konfiguration og Miljøkonfiguration kilder

En anden nyttig funktion, som dette Spring Cloud-bibliotek giver, er definitionen af ​​en aktuator Slutpunkt at overvåge og interagere med egenskaberne. Dens anvendelse er uden for omfanget af denne vejledning.

6. Tilpasning og udvidelse af Archaius-konfigurationen

Nu hvor vi har en bedre forståelse af, hvordan Archaius fungerer, er vi i god form til at analysere, hvordan vi kan tilpasse konfigurationen til vores applikation, eller hvordan vi udvider funktionaliteten ved hjælp af vores konfigurationskilder.

6.1. Archaius understøttede konfigurationsegenskaber

Hvis vi vil have, at Archaius tager højde for andre konfigurationsfiler, der ligner config.egenskaber en, vi kan definere archaius.configurationSource.additionalUrls systemegenskab.

Værdien parses til en liste over webadresser adskilt af et komma, så vi kan f.eks. Tilføje denne systemegenskab, når vi starter applikationen:

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

Archaius vil læse config.egenskaber filen først og derefter de andre i den angivne rækkefølge. På grund af dette vil egenskaberne, der er defineret i sidstnævnte filer, have prioritet frem for de tidligere.

Der er et par andre systemegenskaber, vi kan bruge til at konfigurere forskellige aspekter af Archaius standardkonfiguration:

  • archaius.configurationSource.defaultFileName: standardkonfigurationsfilnavnet i klassestien
  • archaius.fixedDelayPollingScheduler.initialDelayMills: indledende forsinkelse før læsning af konfigurationskilden
  • archaius.fixedDelayPollingScheduler.delayMills: forsinkelse mellem to læsninger af kilden; standardværdien er 1 minut

6.2. Tilføjelse af yderligere konfigurationskilder med Spring

Hvordan kunne vi tilføje en anden konfigurationskilde, der styres af den beskrevne ramme? Og hvordan kunne vi styre dynamiske egenskaber med højere forrang end dem, der er defineret i forårsmiljøet?

Når vi gennemgår det, vi nævnte i afsnit 4.2, kan vi indse, at de højeste konfigurationer i den sammensatte konfiguration defineret af Spring er Abstrakt konfiguration bønner defineret i sammenhængen.

Dermed, alt hvad vi skal gøre er at tilføje en implementering af denne Apache's abstrakte klasse til vores Spring Context ved hjælp af nogle af funktionaliteterne fra Archaius, og Spring's autokonfiguration vil spontant føje den til de administrerede konfigurationsegenskaber.

For at holde tingene enkle ser vi et eksempel, hvor vi konfigurerer en egenskabsfil, der ligner standard config.egenskaber men med forskellen i at have en højere prioritet end resten af ​​Spring-miljøet og applikationsegenskaber:

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

Heldig for os overvejer det flere konfigurationskilder, som vi næsten kan opsætte med næsten ingen anstrengelse. Deres konfiguration er uden for omfanget af denne introduktionsvejledning.

7. Konklusion

For at opsummere har vi lært om Archaius og nogle af de seje funktioner, det tilbyder for at drage fordel af konfigurationsstyring.

Vi så også, hvordan Spring Cloud-autokonfigurationsbiblioteket kommer i spil, så vi nemt kan bruge dette biblioteks API.

Endnu en gang kan vi finde alle eksemplerne vist i denne vejledning og andre i vores Github repo.


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