当前位置: 首页 > 知识库问答 >
问题:

Spring引导关闭钩

呼延修然
2023-03-14

我如何注册/添加一个自定义的关闭例程,当我的Spring Boot应用程序关闭时,该例程将被触发?

场景:我将Spring Boot应用程序部署到一个Jetty servlet容器(即,没有嵌入式Jetty)。我的应用程序使用Logback进行日志记录,并且我希望在运行时使用Logback的MBean JMX配置器更改日志记录级别。它的文档说明,为了避免内存泄漏,在关机时必须调用特定的LoggerContext关机方法。

侦听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");
        }
    });
}

共有1个答案

陆晓博
2023-03-14

http://docs.spring.io/spring-boot/docs/current-snapshot/reference/htmlsingle/#boot-features-application-exit

每个SpringApplication都将向JVM注册一个shutdown挂钩,以确保ApplicationContext在退出时优雅地关闭。可以使用所有标准的Spring生命周期回调(如DisposableBean接口或@predestroy注释)。

此外,如果bean希望在应用程序结束时返回特定的退出代码,那么它们可能会实现org.springframework.boot.ExitCodeGenerator接口。

 类似资料:
  • 我阅读了如何以正确的方式关闭一个Spring Boot应用程序?,所以我尝试使用http关闭endpoint来关闭我的Spring Boot嵌入式tomcat应用程序。 有没有办法只挂起关闭endpoint,这样我就可以检查请求者IP了?

  • 我已经将ShutDownHook添加到我的Spring Boot应用程序中。当我将SIGTERM传递给我的应用程序时,shutdown钩子被触发,但它在中途终止,即在执行过程中终止。谷歌了它,尝试了很多解决方案,但都不起作用。一些专家,请帮我一下。 GracefulShutdownHook类: 我想让关机钩子更新一些缓存和一些逻辑,这会消耗一些额外的处理时间。 当我尝试使用“杀戮-15”杀戮时的日

  • 我想关闭Spring Boot应用程序控制台上的调试输出。我希望有一个默认的信息记录。但事实并非如此。我试图用暴力来关闭关卡https://mkyong.com/spring-boot/spring-boot-log4j-2-example/我不喜欢这个,现在它甚至不工作。在如何在spring boot中关闭调试日志消息中,这被标记为解决方案。我想不是。我将我的项目减少到最小,并在多种设置中得到此

  • 我有一个引导模式对话框,我想首先显示,然后当用户单击页面时,它就消失了。我有以下内容: 最初会显示该模式,但在模式之外单击该模式时不会关闭。此外,内容区域不是灰色的。我如何使模式显示最初,然后关闭后,用户点击该区域以外?我怎样才能让背景像演示一样变灰?

  • 我第一次使用Spring Boot应用程序时,执行器是不安全的,所以很容易通过/acture/shutdownendpoint远程关闭。最近,我已经使用Spring安全保护了我的执行器,它已经起作用了。现在我需要提供http基本凭据来访问endpoint,但现在对/acture/shutdownendpoint的curl调用失败,出现禁止错误。我一定是配置不正确的地方。 我的卷曲命令: 我的配置:

  • 我如何手动将spring-boot-starter-thymeleaf添加到我的Java项目中?我正在尝试使用Maven中的依赖项来实现: 但它对我不起作用,所以我不能使用thymeleaf选项。我处理Java8。我将感激任何帮助。