如何注册/添加在 Spring Boot 应用程序关闭时触发的自定义关闭例程?
场景:我将 Spring Boot 应用程序部署到 Jetty servlet 容器(即没有嵌入式 Jetty)。我的应用程序使用 Logback 进行日志记录,并且我想在运行时使用 Logback 的 MBean JMX 配置器更改日志记录级别。它的文档指出,为了避免内存泄漏,在关闭时必须调用特定的 LoggerContext 关闭方法 http://logback.qos.ch/manual/jmxConfig.html#leak.
监听 Spring Boot 关闭事件的好方法是什么?
我努力了:
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext cac = SpringApplication.run(Example.class, args);
cac.addApplicationListener(new ApplicationListener<ContextClosedEvent>() {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
logger.info("Do something");
}
});
}
但是当应用程序关闭时,不会调用这个注册的侦听器。
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#features.spring-application.application-exit https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#features.spring-application.application-exit
每个 SpringApplication 都会向 JVM 注册一个关闭钩子,以确保 ApplicationContext 在退出时正常关闭。可以使用所有标准 Spring 生命周期回调(例如 DisposableBean 接口或 @PreDestroy 注释)。
此外,如果 bean 希望在应用程序结束时返回特定的退出代码,则可以实现 org.springframework.boot.ExitCodeGenerator 接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)