Rückrufe zum Herunterfahren im Frühjahr

1. Übersicht

In diesem Tutorial lernen wir verschiedene Möglichkeiten kennen, wie Sie mit Spring Rückrufe zum Herunterfahren verwenden können .

Der Hauptvorteil eines Rückrufs zum Herunterfahren besteht darin, dass wir die Kontrolle über einen ordnungsgemäßen Anwendungs-Exit haben.

2. Rückrufansätze herunterfahren

Spring unterstützt sowohl die Rückrufe zum Herunterfahren auf Komponentenebene als auch auf Kontextebene. Wir können diese Rückrufe erstellen mit:

  • @ PreDestroy
  • DisposableBean- Schnittstelle
  • Bean-Destroy-Methode
  • Globaler ServletContextListener

Lassen Sie uns all diese Ansätze anhand von Beispielen betrachten.

2.1. Verwenden von @PreDestroy

Erstellen wir eine Bean, die @PreDestroy verwendet :

@Component public class Bean1 { @PreDestroy public void destroy() { System.out.println( "Callback triggered - @PreDestroy."); } }

Während der Bean-Initialisierung registriert Spring alle Bean-Methoden, die mit @PreDestroy kommentiert sind, und ruft sie auf, wenn die Anwendung heruntergefahren wird.

2.2. Verwenden der DisposableBean- Schnittstelle

Unsere zweite Bean implementiert die DisposableBean- Schnittstelle, um den Rückruf zum Herunterfahren zu registrieren:

@Component public class Bean2 implements DisposableBean { @Override public void destroy() throws Exception { System.out.println( "Callback triggered - DisposableBean."); } }

2.3. Deklarieren einer Bean Destroy-Methode

Für diesen Ansatz erstellen wir zunächst eine Klasse mit einer benutzerdefinierten Zerstörungsmethode:

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

Anschließend erstellen wir die Konfigurationsklasse, die die Bean initialisiert und ihre destroy () -Methode als unseren Rückruf zum Herunterfahren markiert :

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

Die XML-Methode zum Registrieren der Zerstörungsmethode lautet:

2.4. Verwenden eines globalen ServletContextListener

Im Gegensatz zu den anderen drei Ansätzen, die den Rückruf bei bean Ebene registrieren, die ServletContextListener registrieren den Rückruf im Kontextebene .

Dazu erstellen wir einen benutzerdefinierten Kontext-Listener:

public class ExampleServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent event) { System.out.println( "Callback triggered - ContextListener."); } @Override public void contextInitialized(ServletContextEvent event) { // Triggers when context initializes } }

Wir müssen es in der ServletListenerRegistrationBean in der Konfigurationsklasse registrieren :

@Bean ServletListenerRegistrationBean servletListener() { ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean(); srb.setListener(new ExampleServletContextListener()); return srb; }

3. Fazit

Wir haben die verschiedenen Möglichkeiten kennengelernt, die Spring bietet, um Rückrufe beim Herunterfahren sowohl auf Bean-Ebene als auch auf Kontextebene zu registrieren.

Diese können verwendet werden, um die Anwendung ordnungsgemäß herunterzufahren und die verwendeten Ressourcen effektiv freizugeben.

Wie immer finden Sie alle in diesem Artikel genannten Beispiele auf Github.