Rappels d’arrêt au printemps

Rappels de fermeture à ressort

1. Vue d'ensemble

Dans ce didacticiel, nous allons découvrir différentes méthodesto use shutdown callbacks with Spring.

L’utilisation d’un rappel d’arrêt a pour principal avantage de nous permettre de contrôler une sortie d’application élégante.

2. Approches de rappel d'arrêt

Spring prend en charge les rappels d'arrêt au niveau composant et au niveau contexte. Nous pouvons créer ces callbacks en utilisant:

  • @PreDestroy

  • Interface deDisposableBean

  • Méthode de destruction des haricots

  • GlobalServletContextListener

Voyons toutes ces approches avec des exemples.

2.1. Utilisation de@PreDestroy

Créons un bean qui utilise@PreDestroy:

@Component
public class Bean1 {

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

Lors de l'initialisation du bean, Spring enregistrera toutes les méthodes de bean annotées avec@PreDestroy et les invoquera lorsque l'application s'arrêtera.

2.2. Utilisation de l'interfaceDisposableBean

Notre deuxième bean implémentera l'interfaceDisposableBean pour enregistrer le rappel d'arrêt:

@Component
public class Bean2 implements DisposableBean {

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

2.3. Déclaration d'une méthode Bean Destroy

Pour cette approche, nous allons d'abord créer une classe avec une méthode de destruction personnalisée:

public class Bean3 {

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

Ensuite, nous créons la classe de configuration qui initialise le bean et marque sa méthodedestroy() comme notre rappel d'arrêt:

@Configuration
public class ShutdownHookConfiguration {

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

La méthode XML pour enregistrer la méthode destroy est la suivante:

2.4. Utilisation d'unServletContextListener global

Contrairement aux trois autres approches, qui enregistrent le rappel au niveau du bean,the ServletContextListener registers the callback at context level.

Pour cela, créons un écouteur de contexte personnalisé:

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

Nous devons l'enregistrer dans lesServletListenerRegistrationBean dans la classe de configuration:

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

3. Conclusion

Nous avons découvert les différentes façons dont Spring fournit pour enregistrer les rappels d'arrêt, à la fois au niveau du bean et au niveau du contexte.

Celles-ci peuvent être utilisées pour arrêter l'application avec élégance et efficacement, libérant ainsi les ressources utilisées.

Comme toujours, tous les exemples mentionnés dans cet article peuvent être trouvésover on Github.