Tilbagekaldelser ved lukning af foråret

1. Oversigt

I denne vejledning lærer vi forskellige måder at bruge tilbagekaldelser til lukning med Spring.

Den største fordel ved at bruge en shutdown callback er, at det giver os kontrol over en yndefuld applikationsafslutning.

2. Nedlukningsmetoder til tilbagekaldelse

Spring understøtter både komponent-niveau og kontekst-niveau nedlukning tilbagekald. Vi kan oprette disse tilbagekald ved hjælp af:

  • @PreDestroy
  • Engangsbønne interface
  • Bønne-ødelægge metode
  • Global ServletContextListener

Lad os se alle disse tilgange med eksempler.

2.1. Ved brug af @PreDestroy

Lad os oprette en bønne, der bruger @PreDestroy:

@Komponent offentlig klasse Bean1 {@PreDestroy offentlig ugyldighed ødelægge () {System.out.println ("Tilbagekald udløst - @PreDestroy."); }}

Under initialiseringen af ​​bønner registrerer Spring alle de bønnemetoder, der er kommenteret med @PreDestroy og påberåber dem, når applikationen lukkes ned.

2.2. Bruger Engangsbønne Interface

Vores anden bønne implementerer Engangsbønne grænseflade til registrering af nedlukning:

@Komponent offentlig klasse Bean2 implementerer DisposableBean {@Override public void destroy () kaster Undtagelse {System.out.println ("Callback triggered - DisposableBean."); }}

2.3. Erklæring om en Bean Destroy Method

For denne tilgang opretter vi først en klasse med en brugerdefineret destruktionsmetode:

public class Bean3 {public void destroy () {System.out.println ("Callback triggered - bean destroy method."); }}

Derefter opretter vi konfigurationsklassen, der initialiserer bønnen og markerer dens ødelægge() metode som vores tilbagekaldelse til nedlukning:

@Configuration public class ShutdownHookConfiguration {@Bean (destroyMethod = "destroy") public Bean3 initializeBean3 () {returner ny Bean3 (); }}

XML-metoden til registrering af destrueringsmetoden er:

2.4. Brug af et globalt ServletContextListener

I modsætning til de andre tre tilgange, der registrerer tilbagekald på bønneniveau, det ServletContextListener registrerer tilbagekaldet på kontekstniveau.

Lad os oprette en brugerdefineret kontekstlytter til dette:

offentlig klasse ExampleServletContextListener implementerer ServletContextListener {@Override public void contextDestroyed (ServletContextEvent event) {System.out.println ("Callback triggered - ContextListener."); } @Override public void contextInitialized (ServletContextEvent event) {// Udløser når kontekst initialiseres}}

Vi er nødt til at registrere det til ServletListenerRegistrationBean i konfigurationsklassen:

@Bean ServletListenerRegistrationBean servletListener () {ServletListenerRegistrationBean srb = ny ServletListenerRegistrationBean (); srb.setListener (nyt eksempelServletContextListener ()); returner srb; }

3. Konklusion

Vi har lært om de forskellige måder, som Spring tilbyder for at registrere tilbagekaldelser til nedlukning, både på bønneniveau og på kontekstniveau.

Disse kan bruges til at lukke applikationen yndefuldt og effektivt frigøre de anvendte ressourcer.

Som altid kan alle eksemplerne nævnt i denne artikel findes på Github.


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