跳至主要內容
记一个 SpringBoot 优雅停机失败问题

概要

最近,生产环境 EKS(Elastic Kubernetes Service)偶尔出现 POD 被强杀问题。

项目是 SpringBoot 框架,启动了优雅停机,并且配置了停机时长为 120 秒。既然是被强杀,那肯定是因为在 120 秒内没有正常停掉应用。

经过日志分析,是由于开了弹性伸缩,项目还没启动完就收到了 kill 信号,这时候启动线程和停机线程并行跑,导致被停掉的线程又被启动起来,最终导致优雅停机失败,过了 120 秒后,容器被 kill -9 了。

过程分析

为什么说“启动线程和停机线程并行跑,导致被停掉的线程又被启动起来”,难道 SpringBoot 就这么 LOW ,就不知道让启动线程跑完再执行停机线程?


Mr.Chen大约 3 分钟文章JavaSpringBoot
简单 SpringBoot 示例

Spring Boot

由于朋友重新写起了代码,为了能让他快速地上手并搭建一个简单的springboot应用,花了一个多小时,终于写完了一个简单的springboot-demo并能直接在eclipse上启动,现在分享出来给有需要的朋友。源码地址看文章最后面,操作步骤如下:

  1. 将maven目录下的settings.xml文件复制到用户目录下的.m2目录里(如:C:\Users\Think.m2\settings.xml)

  2. 在eclipse中点菜单File->Import->Existing Maven Projects,并选择code目录。

  3. 将sql目录中的建表语句在数据库中执行。

  4. 在eclipse中打开项目,修改application.properties中的数据库连接信息。

  5. 右击SpringbootDemoApplication.java文件,选择Run As -> Spring Boot App。

  6. 启动成功后,在浏览器上访问http://localhost:8080/get-by-email?email=c@c.com


Mr.Chen大约 1 分钟文章JavaSpringBoot