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.