Retornos de chamada de desligamento de primavera

Retornos de chamada de desligamento de primavera

1. Visão geral

Neste tutorial, vamos aprender maneiras diferentesto use shutdown callbacks with Spring.

A principal vantagem de usar um retorno de chamada de desligamento é que ele nos dá controle sobre uma saída normal do aplicativo.

2. Abordagens de retorno de chamada de desligamento

O Spring suporta os retornos de chamada de desligamento no nível do componente e no contexto. Podemos criar esses retornos de chamada usando:

  • @PreDestroy

  • interfaceDisposableBean

  • Método de destruição de feijão

  • GlobalServletContextListener

Vamos ver todas essas abordagens com exemplos.

2.1. Usando@PreDestroy

Vamos criar um bean que usa@PreDestroy:

@Component
public class Bean1 {

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

Durante a inicialização do bean, o Spring registrará todos os métodos de bean anotados com@PreDestroye os chamará quando o aplicativo for encerrado.

2.2. Usando a interfaceDisposableBean

Nosso segundo bean implementará a interfaceDisposableBean para registrar o retorno de chamada de desligamento:

@Component
public class Bean2 implements DisposableBean {

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

2.3. Declarando um método de destruição de feijão

Para essa abordagem, primeiro criaremos uma classe com um método de destruição personalizado:

public class Bean3 {

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

Em seguida, criamos a classe de configuração que inicializa o bean e marca seu métododestroy() como nosso callback de desligamento:

@Configuration
public class ShutdownHookConfiguration {

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

A maneira XML de registrar o método destroy é:

2.4. Usando umServletContextListener Global

Ao contrário das outras três abordagens, que registram o retorno de chamada no nível do bean,the ServletContextListener registers the callback at context level.

Para isso, vamos criar um ouvinte de contexto personalizado:

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

Precisamos registrá-lo emServletListenerRegistrationBean na classe de configuração:

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

3. Conclusão

Aprendemos sobre as diferentes maneiras que o Spring fornece para registrar retornos de chamada de desligamento, tanto no nível do bean quanto no nível do contexto.

Eles podem ser usados ​​para desligar o aplicativo de maneira graciosa e eficaz, liberando os recursos usados.

Como sempre, todos os exemplos mencionados neste artigo podem ser encontradosover on Github.