Callback di Spring Shutdown

1. Panoramica

In questo tutorial, impareremo diversi modi per utilizzare i callback di arresto con Spring .

Il vantaggio principale dell'utilizzo di un callback di arresto è che ci dà il controllo su un'uscita dall'applicazione graziosa.

2. Approcci per la richiamata all'arresto

Spring supporta i callback di chiusura sia a livello di componente che a livello di contesto. Possiamo creare questi callback usando:

  • @PreDestroy
  • Interfaccia DisposableBean
  • Metodo di distruzione dei fagioli
  • Global ServletContextListener

Vediamo tutti questi approcci con esempi.

2.1. Utilizzando @PreDestroy

Creiamo un bean che utilizzi @PreDestroy :

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

Durante l'inizializzazione del bean, Spring registrerà tutti i metodi del bean che sono annotati con @PreDestroy e li invoca quando l'applicazione si chiude.

2.2. Utilizzo dell'interfaccia DisposableBean

Il nostro secondo bean implementerà l' interfaccia DisposableBean per registrare il callback di arresto:

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

2.3. Dichiarazione di un metodo Bean Destroy

Per questo approccio, in primo luogo creeremo una classe con un metodo di distruzione personalizzato:

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

Quindi, creiamo la classe di configurazione che inizializza il bean e contrassegna il suo metodo destroy () come nostro callback di spegnimento:

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

Il modo XML per registrare il metodo di distruzione è:

2.4. Utilizzo di un ServletContextListener globale

A differenza degli altri tre approcci che registrano il callback a livello fagiolo, il ServletContextListener registra il callback a livello di contesto .

Per questo creiamo un listener di contesto personalizzato:

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 } }

Dobbiamo registrarlo in ServletListenerRegistrationBean nella classe di configurazione:

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

3. Conclusione

Abbiamo imparato i diversi modi in cui Spring fornisce per registrare i callback di chiusura, sia a livello di bean che a livello di contesto.

Questi possono essere utilizzati per chiudere l'applicazione in modo corretto ed efficace liberando le risorse utilizzate.

Come sempre tutti gli esempi citati in questo articolo possono essere trovati su Github.