spring-boot 2 优雅关闭网络

Posted

技术标签:

【中文标题】spring-boot 2 优雅关闭网络【英文标题】:spring-boot 2 graceful shutdown web 【发布时间】:2018-12-23 23:02:20 【问题描述】:

是否有任何推荐的方式来优雅地关闭 Kubernetes 中的 Spring:boot 2 应用程序。

    捕获终止信号 SIGTERM 告诉 Tomcat 停止接受新请求。 (或 Jetty、Undertow 或 Netty/WebFlux,具体取决于所使用的嵌入式 Web 服务器)。或者告诉 SCS 停止在 Kafka 上发送/收听消息。 告诉 Actuator 健康端点转到 SERVICE_UNAVAILABLE (503) 然后在 X 秒后关闭应用程序或 (SIGKILL)

我正在尝试正常关闭 Rest 应用和 SCS(kafka 消费者和生产者)应用

【问题讨论】:

在 Kubernetes 中推荐的方法 【参考方案1】:

如果您使用的是最新版本的 spring-boot,即 2.3.5.RELEASE,那么您只需将以下属性添加到 application.properties 文件即可。

server.shutdown=优雅 spring.lifecycle.timeout-per-shutdown-phase=30s

在 Kubernetes 世界中,您可以使用 preStop 挂钩。但是,当您真正想要在 SIGTERM 启动之前暂停时,请使用此选项。

在容器终止之前立即调用此钩子。没有参数传递给处理程序。此事件处理程序是阻塞的,并且必须在删除容器的调用发送到 Docker 守护程序之前完成。 Docker 发送的 SIGTERM 通知也仍然发送。终止行为更完整的描述可以在 Pod 的终止中找到。

【讨论】:

以上是关于spring-boot 2 优雅关闭网络的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot+mybatis整合简写

无法将 spring-boot 2 服务连接到不同容器中的 mysql

我遇到了使用 spring-boot 2.0.2.RELEASE 进行 Hibernate/lucene 搜索的问题

spring-boot结合maven配置不同环境的profile

spring-boot入门

让 oauth2 与 spring-boot 和 rest 一起工作