问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Spring Boot 优雅停机

发布网友 发布时间:2024-10-22 00:18

我来回答

1个回答

热心网友 时间:2024-10-22 00:54

所谓优雅停机,指的是在接收到停止指令后,应用进程能确保当前正在处理的业务操作不受影响,直至完成。具体步骤是停止接收新请求,等待现有请求处理完毕并成功返回后才真正终止。Java生态下,底层技术支持实现了在Java语言上各Web容器的优雅停机。

Linux环境中的`kill`命令负责终止进程,通过后跟数字实现信号编号的发送。`kill -l`可以列出所有信号编号,`kill -9 pid`强制性杀死进程,`kill -15 pid`发送通知应用主动关闭,`ctrl+c`操作则相当于`kill -2 pid`,用于通知前台进程终止。

以Jar包形式运行应用,使用`kill -15 pid`或`ctrl+c`,而`kill -9 pid`命令无任何输出。应用中关键在于`Runtime.class`和`ApplicationShutdownHooks.class`,`Shutdown.add`方法执行Runnable任务,通过`ApplicationShutdownHooks`类和`DeleteOnExitHook`类存放关闭前处理线程。Spring Boot通过`SpringApplication`注册关闭钩子。

实现优雅停机的关键在于正确处理请求和线程管理。以Tomcat作为servlet容器为例,实现`LifecycleListener`接口并获取Connector,监听Spring的关闭事件。对于`connector.pause()`执行后,应用仍可接受新请求,直至线程池被shutdown后返回`connection peer`。较好的做法是在低流量时段进行滚动部署,将流量导入一部分实例,关闭其余实例并部署新服务,确认无误后再切换流量。

线程何时退出由线程自身决定。使用`Thread.interrupt`方法将线程设置为中断状态。如果线程处于阻塞状态(如`wait`方法或IO等待),会立即退出并抛出`InterruptedException`异常。如果线程处于运行状态,中断状态仅被设置,线程通过`isInterrupted`方法检查自己是否被中断来决定是否退出。

线程池提供`shutdownNow`和`shutdown`方法。`shutdownNow`拒绝接收新任务,立即关闭线程池,未执行的任务不再执行。`shutdown`同样拒绝接收新任务,等待现有任务执行完毕后关闭线程池。`advanceRunState(STOP)`将线程池状态设置为`STOP`,`interruptWorkers()`中断所有工作线程,`tasks = drainQueue()`移除队列中的未执行任务并返回。

`shutdownNow`后,线程池的反应是当任务处于运行状态时不受中断影响继续执行,但阻塞状态时会抛出`InterruptedException`导致循环结束。当`getTask`方法返回`null`时,循环同样结束。由于`shutdownNow`将状态设为`STOP`,线程池将在循环中返回`null`,从而退出。

`shutdown`方法将线程池状态设为`SHUTDOWN`,空闲线程的中断标志被设置。线程退出的依据是`getTask`方法返回`null`,这表示队列为空。在`getTask`方法的`if`判断中,由于线程池已修改为`SHUTDOWN`状态,只有当队列为空时,`getTask`才会返回`null`,从而使得线程退出。

总结而言,优雅停机的核心在于正确管理请求和线程,确保正在处理的业务不受影响直至完成。通过合理的部署策略、线程池管理和中断机制,实现应用的平滑关闭。最后,使用`awaitTermination`方法确保线程池完全关闭,需要等待调用此方法以阻塞等待线程池关闭。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
绩效工资从工资里扣合法吗 无人机电机轴的主要功能有哪些? 闽侯南通多久发展 南通哪个位置最有潜力 南通未来的机遇有哪些 江苏南通的发展前景怎么样 南通这座城市未来发展前景怎样 我女儿阳历08年01月08日出生,{农历07年腊月初一}请高人帮忙改个名字... 我女儿是2012年1月10日10:35分出生的五行缺什么,取什么名字好 这种图片效果怎么做出来的,不是纯白板,仔细看有一个个均匀分布的小圆点... Spring Boot 定时器突然不执行原因 皮衣可以搭配牛仔裤和帆布鞋么 牛仔皮衣搭配什么裤子好看 天津滨海职业学院一年学费是多少 ...200多分想上天津滨海职业学院可以报哪个专业?知道的帮帮忙。_百度知... 滨海职业技术学院录取分数是多少? 多少分能被天津滨海职业学院录取 华为nova2屏幕锁怎么解锁啊 ?存款利息为啥又下调 存款利息怎么计算 我是学连锁经营管理的大专生,考公务员考什么专业好,都需要什么书_百度... 西方佛教和仙人哪个厉害 我是大专生 学的连锁经营管理专业 能报考公务员吗 有哪些佛教节日被定为中国官方节日 华为P10/P10 Plus开卖一分钟京东销售额破亿,为何如此火爆? May i help you?(同义句转换):___ ___i do___you? howdoyoulike一般怎么回答 How do you like this pair of pants (同义句转换) 南京江宁孔雀城紫樾澜庭售楼中心电话是多少? 摩托车不管是冷车还是热车发动前必须拉开风门 发动着了并且冒蓝烟。摩托... 摩托车温度高熄火休息片刻好了再跑又如此 水晶蒸饺:口感透明,爽口好吃 水晶蒸饺的做法有哪些比较特别的地方? 水晶蒸饺的口感跟哪些因素有关? 影响水晶蒸饺口感的因素有哪些? 老公和我村女人已经几年还不断我该怎么办 我老公和我村一妇女爱昧聊天,我去找和老公聊天这妇女的麻烦违法吗? 村里人都知道老公和邻居出轨怎么办 ...叶子还厚厚的指头还长出小碎花儿的一种藤蔓植物。这个植物叫什么... 这到底是什么花,开始只是长出几个红色的芽,慢慢就开花了,一朵里有... 芭提雅泰浴历史,3分钟了解一下 ...四瓣花组成一朵花,是什么花?叶子有点像大个的薄荷叶。 哪种植物可以开紫色的小碎花? 宠物网名500个 绵山附近的地道旅游景点有哪些 流鼻血发烧怎么回事 玩客币会不会成为第二个比特币 ...的经络很明显,叶片有点红,并且越长越红,是什么花 求“墙上芦苇,头重脚轻根底浅;山间竹笋,嘴尖皮厚腹中空。”这句话... 嘴尖皮厚腹中空什么意思?有什么典故?英文翻译是什么? 仁和恩视明有效果不