服务优雅停机SpringBoot

什么是优雅停机
​ 优雅停机指的是Java项目在停机时需要做好断后工作。如果直接使用kill -9 方式暴力的将项目停掉,可能会导致正常处理的请求、定时任务、RMI、注销注册中心等出现数据不一致问题。

​ 如何解决优雅停机呢?大致需要解决如下问题:

首先要确保不会再有新的请求进来,所以需要设置一个流量挡板
保证正常处理已进来的请求线程,可以通过计数方式记录项目中的请求数量
如果涉及到注册中心,则需要在第一步结束后注销注册中心
停止项目中的定时任务
停止线程池
关闭其他需要关闭资源等等等

Spring Boot提供了优雅停机的功能,这意味着当你想要停止应用程序时,Spring Boot可以确保当前正在处理的请求完成后再关闭应用程序。这个特性在Spring Boot 2.3及更高版本中得到了增强。

要启用优雅停机,你需要做以下几步:

  1. 引入spring-boot-starter-actuator依赖:spring-boot-starter-actuator模块提供了很多生产级的特性,包括监控应用程序、收集应用的度量、理解应用的运行状态等。

  2. 配置优雅停机:在application.properties或application.yml中配置优雅停机的相关属性。

  3. 使用Actuator的/shutdown端点:如果你已经引入了spring-boot-starter-actuator,你可以通过调用Actuator的/shutdown端点来触发优雅停机。

下面是如何实现这些步骤的详细说明:
1. 引入spring-boot-starter-actuator依赖
在你的pom.xml文件中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 配置优雅停机
在application.properties中添加以下配置:

# 开启优雅停机功能
spring.lifecycle.timeout-per-shutdown-phase=30s

或者在application.yml中添加:

spring:lifecycle:timeout-per-shutdown-phase: 30s

这里的timeout-per-shutdown-phase是指在实际关闭应用程序之前,Spring Boot等待正在运行的请求完成的时间。
3. 使用Actuator的/shutdown端点
首先,确保你已经暴露了shutdown端点:

management.endpoint.shutdown.enabled=true

或者在application.yml中:

management:endpoints:web:exposure:include: shutdownendpoint:shutdown:enabled: true

然后,你可以通过发送POST请求到/actuator/shutdown来触发优雅停机:

curl -X POST http://localhost:8080/actuator/shutdown

请注意,出于安全考虑,默认情况下shutdown端点是不暴露的。在生产环境中,你应该小心使用这个功能,并确保它只能被信任的用户访问。
以上步骤将配置Spring Boot应用程序以支持优雅停机,并通过Actuator的/shutdown端点来触发停机

在Spring Boot中,优雅停机的实现依赖于Spring Framework的ApplicationContext和Lifecycle接口。
以下是从源码层面分析调用优雅停机接口的关键步骤:

  1. Actuator Shutdown Endpoint:
  • ShutdownEndpoint类是Actuator提供的用于停机的端点。
  • 当发送POST请求到/actuator/shutdown时,会调用ShutdownEndpoint的shutdown()方法。
  1. 发布ContextClosedEvent:
  • shutdown()方法会发布一个ContextClosedEvent。
  • 这个事件会被Spring容器中的各种组件监听到,它们会开始执行关闭逻辑。
  1. 停止Lifecycle Beans:
  • Spring容器会调用实现了Lifecycle接口的beans的stop()方法。
  • 这包括SmartLifecycle beans,它们有一个getPhase()方法来指定停止顺序。
  1. Web服务器优雅停机:
  • 对于内嵌的Web服务器(如Tomcat, Jetty, Undertow),Spring Boot 2.3+提供了优雅停机支持。
  • Web服务器的连接器会停止接受新的请求,同时等待活动请求完成,直到配置的超时时间。
  1. 等待活动任务完成:
  • 如果你有异步任务或者调度任务,Spring Boot会等待这些任务完成,或者达到配置的超时时间。
  1. 关闭Spring容器:
  • 最后,ApplicationContext会被关闭,所有的单例beans会被销毁。

在源码中,这些步骤主要涉及以下几个关键类和接口:

  • ShutdownEndpoint: Actuator端点类,用于处理停机请求。
  • ContextClosedEvent: 当应用上下文关闭时发布的事件。
  • Lifecycle: 一个接口,定义了start()和stop()方法,用于管理组件的生命周期。
  • SmartLifecycle: Lifecycle的扩展,添加了对启动和关闭阶段的支持。
  • WebServer: 抽象了内嵌Web服务器的接口,提供了停止服务器的方法。
    优雅停机的实现细节可能因Spring Boot的不同版本而有所变化,但上述步骤概括了其核心逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】 RPM 命令参数使用

rpm 执行安装包二进制包&#xff08;Binary&#xff09;以及源代码包&#xff08;Source&#xff09;两种。二进制包可以直接安装在计算机中&#xff0c;而源代码包将会由 RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。 常用命令组合&#xff1a; &#xff0d;ivh&a…

GZ075 云计算应用赛题第8套

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷8 某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenSt…

x-cmd pkg | tokei - 代码行数统计工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 tokei 是一个使用 Rust 编写的显示有关代码统计信息的命令行工具&#xff0c;可以分门别类的统计目录内的代码行数。 tokei 具有良好的跨平台性&#xff0c;可以在 Linux、macOS、Windows 等多种平台上安装运行。 首…

林江院长:让斜视的孩子改“斜”归正,“正视”未来

读写时跳行、不敢和别人对视、拍照时不敢看镜头......这些不便是不少斜视患儿每天都在经历的日常。 斜视是目前儿童常见的眼科疾病之一&#xff0c;该眼病不仅给孩子的外在形象带来影响&#xff0c;更重要的是会影响双眼视功能及身心健康&#xff0c;其危害不容小觑。 7岁男孩晓…

程序员晋升管理者后的自我修养

谈到技术管理&#xff0c;首要的一点就是管理者的角色认知问题&#xff0c;因此本篇文章的主要内容就是如何增强管理者的角色认知&#xff0c;持续提升自我管理能力。 作为管理者&#xff0c;首要任务就是要认清自我并管理好自己&#xff0c;要树立对管理者角色的正确认知&…

【线路图】 DC-DC升压恒压控制驱动芯片 2.8-40V AP8100

说明 AP8100 是一款外围电路简单的 BOOST 升压恒压控 制驱动芯片&#xff0c;适用于 2.8-40V 输入电压范围的升压恒 压电源应用领域&#xff0c;启动电压可以低至 2.5V 。 芯片会根据负载的大小自动切换 PWM &#xff0c; PFM 和 BURST 模式以提高各个负载端的…

AI魔幻巨制电影《权力的游戏:重生之战》

AI魔幻巨制电影《权力的游戏&#xff1a;重生之战》 《冰与火之歌》龙妈雪诺后裔是谁&#xff1f;你相信龙族的力量可以改变维斯特洛大陆的命运吗&#xff1f; 在《权力的游戏&#xff1a;重生之战》中&#xff0c;维斯特洛大陆再次陷入混乱之中&#xff0c;但这一次的混乱并非…

Redis 交互模式

交互模式&#xff08;Interact Mode&#xff09; 安装 Redis 时通常连带安装了一个 Redis CLI &#xff08;apt install redis 或者是 apt install redis-cli 类似的&#xff09;。在本博客中将会对 redis-cli 中的常用命令做一个使用介绍&#xff0c;下文中以黑色代码块表示在…

Python单元测试框架:pytest常用测试报告类型

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 先前博客有介绍pytest测试框架的安装及使用&#xff0c;现在来聊…

Linux用户提权

新建用户 用root账户修改文件&#xff0c;添加信任用户 使用sudo提权&#xff0c;可以使用 **root删除新建账户**

JavaScript:JQuery.Ajax之错误调试帮助信息

JQuery.Ajax之错误调试帮助信息 代码&#xff1a; $(document).ready(function() {$("#info").click(function() {$.ajax({url: "/v1/getInfo",type: "post",data: { id: 1 },dataType: "json",success: function(msg) {alert(msg);}…

联想小新M7268一体机常用功能和操作步骤

联想小新M7268黑白激光多功能打印一体机&#xff0c;小身材、大智慧&#xff0c;小心M7268身材十分娇小&#xff0c;净尺寸方面为350*275*135mm&#xff08;长*宽*高&#xff09;&#xff08;手工测量&#xff09;&#xff0c;在实际使用时&#xff0c;小新M7268所占空间要略大…

js find方法的使用

JavaScript中的数组find()方法用于查找满足指定条件的第一个数组元素&#xff0c;并返回该元素。 find()方法的语法如下&#xff1a; array.find(callback[, thisArg]) 其中&#xff0c;array是要进行查找的数组&#xff0c;callback是一个回调函数&#xff0c;用于定义查找…

【笔记】认识电机

认识电机 电机一些概念永磁同步电机永磁体定子和转子励磁电磁感应定律 AC Optimal Power Flow功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Smart…

读论高质量供给引领和创造新需求有感

文章摘要&#xff1a; 自让萨伊提出产品“出卖或需求”的过程是“生产给产品创造需求”3这一被后世称之为“萨伊定律”的论断之后&#xff0c;在古典经济学发展的一百多年里&#xff0c;其成为经济理论和政策的基本依据&#xff0c;阿尔弗雷德马歇尔更是基于此构建了新古典经济…

基于4G数采终端的供热管网在线监测方案

我国大部地区全面进入到冬季&#xff0c;北方各地已开启冬季供暖&#xff0c;以保障居民生活所需。由于城市化的发展&#xff0c;城市内各供热区域愈发分散、供热管道漫长、供热环境复杂&#xff0c;对于供热管网及换热站点的监测和维护提出了诸多挑战。 方案介绍 针对提高供热…

伪协议绕过总结记录(本地文件包含、远程文件包含、SSRF)

目录 本地文件包含&远程文件包含 php://filter String Filters (字符串过): Conversion Filters (转换过滤):

浅析五种 React 组件设计模式

作为一名 React 开发者&#xff0c;你可能会面临下面几个问题&#xff1a; 如何构建一个高复用度性的组件&#xff0c;使其适应不同的业务场景&#xff1f;如何构建一个具有简单 API的组件&#xff0c;使其易于使用&#xff1f;如何构建一个在 UI 和功能方面具有可扩展性的组件…

代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

题目&#xff1a;860.柠檬水找零 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:860.柠檬水找零 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:bool lemonadeChange(vector<int>& bills) {unordered_map<int…

知存科技助力AI应用落地:WTMDK2101-ZT1评估板实地评测与性能揭秘

文章目录 一、前言二、深入了解存算一体技术2.1 什么是存算一体2.2 存算一体技术发展历程2.3 基于不同存储介质的存内计算芯片性能比较 三、国产存算一体&#xff0c;重大进展3.1 知存科技&#xff1a;我国存算一体领域的研发领导者 四、知存科技新型 WTM2101 SOC 评估板使用评…