Lat initialisering i Spring Boot 2

1. Oversikt

I denne opplæringen vil vi se hvordan du konfigurerer lat initialisering på applikasjonsnivå, og starter med Spring Boot 2.2

2. Lat initialisering

Som standard om våren opprettes alle definerte bønner og deres avhengighet når applikasjonskonteksten opprettes.

I kontrast, når vi konfigurerer en bønne med lat initialisering, bønnen vil bare bli opprettet, og dens avhengigheter injiseres når de er nødvendige.

3. Maven-avhengigheten

For å få Spring Boot 2.2 i applikasjonen vår, må vi inkludere den i klassestien vår.

Med Maven kan vi bare legge til spring-boot-starter avhengighet:

  org.springframework.boot spring-boot-starter 2.2.2.RELEASE 

4. Aktiver lat initialisering

Spring Boot 2.2 introduserer spring.main.lazy-initialization eiendom, noe som gjør det lettere å konfigurere lat initialisering over hele applikasjonen.

Sette eiendomsverdien til ekte betyr at alle bønnene i applikasjonen vil bruke lat initialisering.

La oss konfigurere eiendommen i vår application.yml konfigurasjonsfil:

vår: hoved: lat initialisering: sant

Eller, hvis det er tilfelle, i vår application.properties fil:

spring.main.lazy-initialization = true

Denne konfigurasjonen påvirker alle bønnene i konteksten. Så hvis vi vil konfigurere lat initialisering for en bestemt bønne, kan vi gjøre det gjennom @Lat nærme seg.

Enda mer kan vi bruke den nye eiendommen, i kombinasjon med @Lat kommentar, satt til falsk.

Eller med andre ord, alle de definerte bønnene vil bruke lat initialisering, bortsett fra de som vi eksplisitt konfigurerer med @Lazy (false).

5. Løp

La oss lage en enkel tjeneste som gjør det mulig for oss å teste det vi nettopp beskrev.

Ved å legge til en melding til konstruktøren, vet vi nøyaktig når bønnen blir opprettet.

public class Writer {private final String writerId; public Writer (String writerId) {this.writerId = writerId; System.out.println (writerId + "initialisert !!!"); } public void write (String message) {System.out.println (writerId + ":" + message); }}

La oss også lage SpringApplication og injisere tjenesten vi har opprettet før.

@SpringBootApplication public class Application {@Bean ("writer1") public Writer getWriter1 () {return new Writer ("Writer 1"); } @Bean ("writer2") public Writer getWriter2 () {return new Writer ("Writer 2"); } public static void main (String [] args) {ApplicationContext ctx = SpringApplication.run (Application.class, args); System.out.println ("Søknadskontekst initialisert !!!"); Writer writer1 = ctx.getBean ("writer1", Writer.class); writer1.write ("Første melding"); Writer writer2 = ctx.getBean ("writer2", Writer.class); writer2.write ("Andre melding"); }}

La oss sette spring.main.lazy-initialization eiendomsverdi til falsk, og kjør applikasjonen vår.

Forfatter 1 initialisert !!! Forfatter 2 initialisert !!! Søknadskontekst initialisert !!! Skribent 1: Første melding Skribent 2: Andre melding

Som vi kan se, ble bønnene opprettet da applikasjonskonteksten startet opp.

La oss nå endre verdien av spring.main.lazy-initialization til ekte, og kjør søknaden vår på nytt.

Søknadskontekst initialisert !!! Forfatter 1 initialisert !!! Skribent 1: Første melding Skribent 2 initialisert !!! Skribent 2: Andre melding

Som et resultat opprettet applikasjonen ikke bønnene ved oppstartstidspunktet, men bare når den trengte dem.

6. Effekter av lat initialisering

Aktivering av lat initialisering i hele applikasjonen kan gi både positive og negative effekter.

La oss snakke om noen av disse, slik de er beskrevet i den offisielle kunngjøringen om den nye funksjonaliteten:

  1. Lat initialisering kan redusere antall bønner som opprettes når applikasjonen starter - derfor vi kan forbedre oppstartstiden av søknaden
  2. Siden ingen av bønnene er opprettet før de er nødvendige, vi kunne maskere problemer, få dem i kjøretid i stedet for oppstartstid
  3. Problemene kan omfatte ut av minnefeil, feilkonfigurasjoner eller feil som ble funnet i klassen definisjon
  4. Når vi er i en nettkontekst, utløse bønneoppretting på forespørsel vil øke latensen til HTTP-forespørsler - bønnedannelsen vil bare berøre den første forespørselen, men dette kan ha en negativ innvirkning på lastbalansering og automatisk skalering.

7. Konklusjon

I denne opplæringen konfigurerte vi lat initialisering med den nye egenskapen spring.main.lazy-initialization, introdusert i Spring Boot 2.2.

Som alltid er kildekoden for denne opplæringen tilgjengelig på GitHub.


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