spring-boot 2正常关闭网络

时间:2018-07-16 11:47:50

标签: spring-boot kubernetes spring-cloud-stream spring-boot-actuator

是否有任何建议的方法可以正常关闭Kubernetes中的Spring:boot 2应用程序。

  1. 捕获终止信号SIGTERM
  2. 告诉Tomcat停止接受新请求。 (或Jetty,Undertow或Netty / WebFlux,具体取决于所使用的嵌入式Web服务器)。或告诉SCS停止在Kafka上发送/收听消息。
  3. 告诉执行器运行状况终结点进入SERVICE_UNAVAILABLE(503)
  4. 然后在X秒钟后关闭应用程序或(SIGKILL)

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

2 个答案:

答案 0 :(得分:0)

几周前,我发现这篇文章在类似情况下很有用:

http://blog.marcosbarbero.com/graceful-shutdown-spring-boot-apps/

建议的示例已通过将SIGTERM发送到spring-boot服务进行了测试

答案 1 :(得分:0)

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

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

在Kubernetes世界中,您可以使用preStop挂钩。但是,当您实际上想要在启动SIGTERM之前保留时,请使用此功能。

在容器终止之前立即调用此钩子。没有参数传递给处理程序。该事件处理程序处于阻塞状态,必须在删除容器的调用发送到Docker守护程序之前完成。 Docker发送的SIGTERM通知也仍然发送。有关终止行为的更完整描述,请参见《终止终端》。