当前位置:首页 > 科技  > 软件

面试官:SpringBoot如何优雅停机?

来源: 责编: 时间:2024-03-18 17:40:34 98观看
导读优雅停机(Graceful Shutdown)是指在服务器需要关闭或重启时,能够先处理完当前正在进行的请求,然后再停止服务的操作。优雅停机的实现步骤主要分为以下几步:停止接收新的请求:首先,系统会停止接受新的请求,这样就不会有新的任

优雅停机(Graceful Shutdown)是指在服务器需要关闭或重启时,能够先处理完当前正在进行的请求,然后再停止服务的操作。D1k28资讯网——每日最新资讯28at.com

优雅停机的实现步骤主要分为以下几步:D1k28资讯网——每日最新资讯28at.com

  1. 停止接收新的请求:首先,系统会停止接受新的请求,这样就不会有新的任务被添加到任务队列中。
  2. 处理当前请求:系统会继续处理当前已经在处理中的请求,确保这些请求能够正常完成。这通常涉及到等待正在执行的任务完成,如处理HTTP请求、数据库操作等。
  3. 释放资源:在请求处理完成后,系统会释放所有已分配的资源,如关闭数据库连接、断开网络连接等。
  4. 关闭服务:最后,当所有请求都处理完毕且资源都已释放后,系统会安全地关闭服务。

0.SpringBoot如何实现优雅停机?

优雅停机的实现步骤分为以下两步:D1k28资讯网——每日最新资讯28at.com

  1. 使用合理的 kill 命令,给 Spring Boot 项目发送优雅停机指令。
  2. 开启 Spring Boot 优雅停机/自定义 Spring Boot 优雅停机的实现。

1.合理杀死进程

在 Linux 中 kill 杀死进程的常用命令有以下这些:D1k28资讯网——每日最新资讯28at.com

  1. kill -2 pid:向指定 pid 发送 SIGINT 中断信号,等同于 ctrl+c。也就说,不仅当前进程会收到该信号,而且它的子进程也会收到终止的命令。
  2. kill -9 pid:向指定 pid 发送 SIGKILL 立即终止信号。程序不能捕获该信号,最粗暴最快速结束程序的方法。
  3. kill -15 pid:向指定 pid 发送 SIGTERM 终止信号。信号会被当前进程接收到,但它的子进程不会收到,如果当前进程被 kill 掉,它的的子进程的父进程将变成 init 进程 (init 进程是那个 pid 为 1 的进程)。
  4. kill pid:等同于 kill 15 pid。

因此,在以上命令中,我们不能使用“kill -9”来杀死进程,使用“kill”杀死进程即可。D1k28资讯网——每日最新资讯28at.com

2.设置SpringBoot优雅停机

在 Spring Boot 2.3.0 之后,可以通过配置设置开启 Spring Boot 的优雅停机功能,如下所示:D1k28资讯网——每日最新资讯28at.com

# 开启优雅停机,默认值:immediate 为立即关闭server.shutdown=graceful# 设置缓冲期,最大等待时间,默认:30秒spring.lifecycle.timeout-per-shutdown-phase=60s

此时,应用在关闭时,Web 服务器将不再接受新请求,并等待正在进行的请求完成的缓冲时间。D1k28资讯网——每日最新资讯28at.com

然而,如果是 Spring Boot 2.3.0 之前,就需要自行扩展(线程池)来实现优雅停机了。它的核心实现实现是在系统关闭时会调用 ShutdownHook,然后在 ShutdownHook 中阻塞 Web 容器的线程池,直到所有请求都处理完毕再关闭程序,这样就实现自定义优雅线下了。D1k28资讯网——每日最新资讯28at.com

但是,不同的 Web 容器(Tomcat、Jetty、Undertow)有不同的自定义优雅停机的方法,以 Tomcat 为例,它的自定义优雅停机实现如下。D1k28资讯网——每日最新资讯28at.com

2.1 Tomcat 容器关闭代码

public class TomcatGracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {    private volatile Connector connector;    public void customize(Connector connector) {        this.connector = connector;    }    public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {        this.connector.pause();        Executor executor = this.connector.getProtocolHandler().getExecutor();        if (executor instanceof ThreadPoolExecutor) {            try {                log.info("Start to shutdown tomcat thread pool");                ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;                threadPoolExecutor.shutdown();                if (!threadPoolExecutor.awaitTermination(20, TimeUnit.SECONDS)) {                    log.warn("Tomcat thread pool did not shutdown gracefully within 20 seconds. ");                }            } catch (InterruptedException e) {                log.warn("Fail to shut down tomcat thread pool ", e);            }        }    }}

2.2 设置 Tomcat 自动装配

@Configuration@ConditionalOnClass({Servlet.class, Tomcat.class})public static class TomcatConfiguration {    @Bean    public TomcatGracefulShutdown tomcatGracefulShutdown() {        return new TomcatGracefulShutdown();    }    @Bean    public EmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory(TomcatGracefulShutdown gracefulShutdown) {        TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();        tomcatFactory.addConnectorCustomizers(gracefulShutdown);        return tomcatFactory;    }}

D1k28资讯网——每日最新资讯28at.com

PS:Jetty、Undertow 优雅停机的实现方式,参考《面试训练营》,vx:gg_stoneD1k28资讯网——每日最新资讯28at.com

课后思考

Spring Boot Actuator 能实现优雅停机吗?为什么?如何实现分布式系统的优雅停机?D1k28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-77522-0.html面试官:SpringBoot如何优雅停机?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 编程语言3月榜单:Python第一C++排第三,昔日王者第四预示互联网时代结束

下一篇: Java中的锁升级机制:偏向锁、轻量级锁和重量级锁

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • vivo TWS Air开箱体验:真轻 臻好听

    vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 慕岩炮轰抖音,百合网今何在?

    慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
Top