Terugbelverzoeken in de lente

1. Overzicht

In deze tutorial gaan we verschillende manieren leren om shutdown-callbacks te gebruiken met Spring.

Het belangrijkste voordeel van het gebruik van een shutdown-callback is dat het ons controle geeft over het netjes afsluiten van een applicatie.

2. Stop terugbelbenaderingen

Spring ondersteunt zowel de callbacks op componentniveau als op contextniveau. We kunnen deze callbacks maken met behulp van:

  • @PreDestroy
  • Wegwerpboon koppel
  • Bonenvernietigingsmethode
  • Globaal ServletContextListener

Laten we al deze benaderingen met voorbeelden bekijken.

2.1. Gebruik makend van @PreDestroy

Laten we een boon maken die gebruikmaakt van @PreDestroy:

@Component openbare klasse Bean1 {@PreDestroy openbare ongeldige vernietiging () {System.out.println ("Terugbellen geactiveerd - @PreDestroy."); }}

Tijdens de initialisatie van de bonen registreert Spring alle bean-methoden die zijn geannoteerd @PreDestroy en roept ze aan wanneer de applicatie wordt afgesloten.

2.2. De ... gebruiken Wegwerpboon Koppel

Onze tweede boon zal het Wegwerpboon interface om de afsluiting callback te registreren:

@Component public class Bean2 implementeert DisposableBean {@Override public void destroy () gooit uitzondering {System.out.println ("Callback geactiveerd - DisposableBean."); }}

2.3. Een methode voor het vernietigen van bonen aangeven

Voor deze benadering maken we eerst een klasse met een aangepaste vernietigingsmethode:

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

Vervolgens maken we de configuratieklasse die de bean initialiseert en zijn vernietigen() methode als onze shutdown callback:

@Configuration openbare klasse ShutdownHookConfiguration {@Bean (destroyMethod = "destroy") openbare Bean3 initializeBean3 () {retourneer nieuwe Bean3 (); }}

De XML-manier om de vernietigingsmethode te registreren is:

2.4. Met behulp van een Global ServletContextListener

In tegenstelling tot de andere drie benaderingen, die de callback op bean-niveau registreren, de ServletContextListener registreert de callback op contextniveau.

Laten we hiervoor een aangepaste contextlistener maken:

public class ExampleServletContextListener implementeert ServletContextListener {@Override public void contextDestroyed (ServletContextEvent-gebeurtenis) {System.out.println ("Callback geactiveerd - ContextListener."); } @Override public void contextInitialized (ServletContextEvent-gebeurtenis) {// Triggers wanneer context wordt geïnitialiseerd}}

We moeten het registreren bij het ServletListenerRegistrationBean in de configuratieklasse:

@Bean ServletListenerRegistrationBean servletListener () {ServletListenerRegistrationBean srb = nieuwe ServletListenerRegistrationBean (); srb.setListener (nieuwe ExampleServletContextListener ()); retourneer srb; }

3. Conclusie

We hebben geleerd over de verschillende manieren waarop Spring biedt om shutdown-callbacks te registreren, zowel op bean-niveau als op contextniveau.

Deze kunnen worden gebruikt om de applicatie netjes af te sluiten en effectief de gebruikte bronnen vrij te maken.

Zoals altijd zijn alle voorbeelden die in dit artikel worden genoemd, te vinden op Github.