【问题标题】:Allow in flight requests to complete before tomcat/spring mvc container shutdown允许在 tomcat/spring mvc 容器关闭之前完成飞行中的请求
【发布时间】:2017-08-25 10:12:02
【问题描述】:

春季 4.2.3 在 tomcat 7 上运行的 Spring Mvc Web 应用程序。

关闭tomcat时,我正在寻找一种方法来执行以下操作。

  • 停止接收任何请求
  • 在 spring/tomcat 开始关闭所有服务等之前,允许所有当前 进行中 http 请求完成。

之所以这样,是因为我有一个处理购买预付费产品的客户的应用程序。 (通话时间、电力等)。所有进入我的应用程序的请求,必须允许在关闭之前完成,以确保我的数据和事务本身的完整性。

我知道我可以在我的 spring bean 上使用 @PreDestroy 作为挂钩来执行关机操作。但是我需要一种应用程序范围的方法,它可以在 spring 或者容器甚至开始关闭我的服务之前给我钩子。

我已经重新搜索了几个小时,但一直找不到我要找的东西?

【问题讨论】:

    标签: spring-mvc tomcat shutdown application-shutdown


    【解决方案1】:

    SpringBoot 1.5+ 提供了一个选项来优雅地关闭应用程序,这有助于在应用程序关闭之前完成对运行中请求的处理。

    SpringBoot 应用正常关闭流程

    1. JVM 收到 SIGTERM 信号并开始关闭 Spring 容器。

    2. Spring EventListener 侦听 ContextClosedEvent 并在关闭启动后被调用。

    3. EventListener 更新 Spring Boot HealthIndicator 并使其“停止服务”。
    4. 使用 Thread.sleep 延迟上下文关闭,以允许负载平衡器查看更新后的 HealthIndicator 状态并停止向该实例转发请求。
    5. Thread.sleep 完成后,Tomcat 容器会正常关闭。首先暂停连接器,不再接受新请求。接下来,通过允许 Tomcat 线程池可配置的时间量来完成活动线程。
    6. 最后,Spring 上下文关闭。

    有用的链接:

    https://github.com/timpeeters/spring-boot-graceful-shutdown
    https://github.com/SchweizerischeBundesbahnen/springboot-graceful-shutdown
    https://www.baeldung.com/spring-boot-graceful-shutdown

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 2017-11-29
      • 2012-02-28
      相关资源
      最近更新 更多