springboot中如何优雅的关闭服务器

SpringBoot 实现优雅停机处理 是指在服务器需要关闭或重启时,能够先处理完当前正在进行的请求,然后再停止服务的操作。 阅读详情

在生产环境中遇到一些奇葩的问题,一部署服务,就有一些异常的数据,经过分析是部署shell中直接用kill -9进行关闭服务,一些请求还在处理中就被kill了,导致数据存脏数据。开始提出了一些方案,比如后台增加开始部署按钮,点击后,关键的请求(如交易)被拒绝,没有完成的请求继续,等待一段时间后部署。后来看到一篇文章中提到了如何优雅关闭服务器,便详细研究研究,总结了一下优雅关闭服务器大概包括一下几种:
(graceful方式请直接看第四条)
1、设置拦截器,需要部署时点击后台按钮激活拦截关键的请求。过一段时间再部署。缺点是部署麻烦,需要人工去点击。这也是解决问题的初始想法,后来放弃了。

2、通过actuator/shutdown,该功能是集成spring-actuator的功能,操作步骤是:
a、引入

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

b、在配置文件中添加
management.endpoint.shutdown.enabled=true management.endpoints.web.exposure.include=shutdown
c、关闭发送请求:http://localhost/actuator/shutdown
测试过程:先求/leader**,请求在处理中,然后发送http://localhost/actuator/shutdown请求,接着请求/leader**。第一次的/leader**有返回,第二次则显示Could not get any response。
actuator源码:

@Endpoint(id = "shutdown", enableByDefault = false)
public class ShutdownEndpoint implements ApplicationContextAware {
 
    @WriteOperation
    public Map<String, String> shutdown() {
        Thread thread = new Thread(this::performShutdown);
        thread.setContextClassLoader(getClass().getClassLoader());
        thread.start();
    }
 
    private void performShutdown() {
        try {
            Thread.sleep(500L);
        }
        catch (InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
        //和3中的原理一样
        this.context.close();
    }
}

3、自己实现关闭请求接口,通过ConfigurableApplicationContext 的close方法。

 @GetMapping("/shutdown")
    @ApiOperation(value = "关机")
    public void shutDown() {
        ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) context;
        log.info("关机");
        ctx.close();
    }

测试:先求/leader**,请求在处理中,然后发送/shutdown请求,接着请求/leader**。
第一次的/leader**有返回,第二次则显示Could not get any response。

@GetMapping("/leader**")
    @ApiOperation(value = "***排行榜")
    public Result getLeaderBoard(PageVo pageVo,LeaderBoardTypeEnum leaderBoardTypeEnum) throws InterruptedException {
        ThreadLocalUtil.setCacheValue(pageVo);
        log.info("+++++++++++++++++++++++++++++++++++++++++++准备睡觉");
        Thread.sleep(20 * 1000L);
        log.info("--------------------------------------------睡醒了");
        log.info(leaderBoardTypeEnum.getValue());
        LeaderBoardService bean = (LeaderBoardService) context.getBean(leaderBoardTypeEnum.className());
        return bean.handle();
    }

测试结果如下:
在这里插入图片描述

graceful方式

4、在最新的 spring boot 2.3 版本,内置此功能,不需要再自行扩展容器线程池来处理,
目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。我们来看下如何使用:
当使用server.shutdown=graceful启用时,在 web 容器关闭时,web 服务器将不再接收新请求,并将等待活动请求完成的缓冲期。

在这里插入图片描述

CentOS离线安装stress的两种方法及避坑指南 系统压力测试工具stress用于模拟CPU、内存、IO负载,验证服务器稳定性。在隔离网络中,Linux CentOS离线安装stress常因依赖问题失败。离线安装的核心原理是提前拉取rpm包及依赖,或配置本地yum源。利用yumdownloader --resolve可自动下载全部依赖,挂载CentOS ISO则能构建离线源。掌握这些方法,能帮助运维在断网环境快速部署压测工具,避免架构不匹配与依赖缺失。本文详细讲解完整操作、安装验证及常见错误解决方案。 阅读详情

相关推荐

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3315

springboot通过shutdown关闭进程依然存活的问题

背景: 前几个月在组内一个小项目的基础上,进行了springboot的改造。在关闭springboot应用的时候,根据日志确认应用确实被关停,但是应用相关的进程还是存活。 问题: 通过springboot官方推荐的方式调用shutdown的url,在我的应用中是 "http://ip:port/shutdown",关闭springboot应用,应用正确停止,服务下线。但是再次grep进程,发...

延宝小白马的博客 6680

模电实验室:手把手教你调试共射放大电路静态工作点(避免波形失真)

本文详细介绍了共射放大电路静态工作点的调试方法,帮助避免波形失真问题。从实验准备、电路搭建到静态工作点测量,提供了实用的电阻选值策略和常见波形失真解决方案,适合电子相关专业学生和硬件工程师参考学习。

weixin_42531128的博客 375

Netty+UDP+Java,与spring集成,client+server

1.maven中引入依赖包: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLo...

yzh_1346983557的博客 2905

2025最新正版Autodesk 3ds Max 2022安装教程:从下载到中文环境配置全流程解析

Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。

waicsdn_haha的博客 1万+

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译 什么是Firmament? Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, MBD) 的开源自驾仪,可被用来快速构建无人机,无人车,无人船,机器人等平台的控制系统。 系统主要由两部分构成. FMT-Firmware: 一个基于C/C++开发的稳定、高性能的嵌入式系统. FMT-Model: 一个基于MATLAB/Simulink开发的仿真框架以及算法库. 昨天得知FMT开源飞控项目已经开

weixin_45786595的博客 2869

Springboot优雅停机-Springboot的shutdown实现

Springboot优雅停机

一瓶绿茶三元钱 9404

基于本机知识库 + 豆包(火山引擎)+ MCP的落地方案

最小 MVP:本地知识库 + Doubao Embedding + 简单检索。工具化:把检索/写入/系统功能通过 MCP 封装。Agent 编排:RAG 流程 + 自检 + 引用输出。这样你就可以快速落地一个基于豆包 + 本机知识库的 MCP Agent。

lpfasd123的博客 1095

springboot项目当项目停止时关闭socket端口怎么写

Spring Boot 项目中关闭 Socket 端口的方法有很多种。其中一种方法是使用 Spring Boot 的 ShutdownEndpoint。 首先,在你的 Spring Boot 项目中添加 spring-boot-actuator 依赖: <dependency> <groupId>org.springframework.boot</groupI...

weixin_35754676的博客 455

华为自研 ERP、Oracle EBS 与 SAP 上线时系统配置思路设计差异深度分析

本文对比分析了华为自研ERP、Oracle EBS和SAP S/4HANA三大ERP系统在上线配置思路上的核心差异。从架构设计看,华为采用分布式微服务架构,SAP采用分层服务架构,Oracle采用集中式一体化架构;在模块配置上,华为以业务场景为导向,SAP基于行业模板,Oracle强调模块独立性;数据迁移方面,华为侧重业务规则清洗,SAP注重数据质量监控,Oracle依赖标准化工具;流程适配上,华为系统随流程调整,SAP在框架内优化,Oracle需定制开发;定制开发模式差异明显,华为采用插件化扩展,SAP使

金牌架构师 1448

【微服务】Spring Aop原理深入解析

spring原理深度解析

congge 1万+

springboot actuator_springboot-actuator应用后台监控

一 前言springboot 额外的特色是提供了后台应用监控,可以通过 HTTP 或者 JMX的方式管理监控应用,本文主讲HTTP方式;其主要的功能是监控应用的健康状态,查看环境变量等;二 pom.xmlspringboot 2.1.1,主要引入 actuator 依赖,web依赖用于测试;<dependency> <groupId>org.spri...

weixin_39728221的博客 262

基于matlab的阈值分割的车牌定位识别系统

车牌自动识别模块是现代社会智能交通系统(ITS)的重要组成部分,是图像处理和模式识别技术研究的热点,具有非常广泛的应用。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。本案例通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 966

基础连接已经关闭: 服务器关闭了本应保持活动状态的连接_Get Spring Boot 2.3 优雅关闭的新姿势...

Spring Boot 2.3有个新特性叫:Graceful shutdown(优雅关闭)下面是官方的说明:Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-...

weixin_39578513的博客 730

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

不废话:拒绝kill-9,让SpringBoot优雅停机!

先来一段简单的代码,如下: @RestController public class DemoController { @GetMapping("/demo") public String demo() throws InterruptedException { // 模拟业务耗时处理流程 Thread.sleep(20 * 1000L); return "hello"; } } 当我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机 (kill),spring bo

Java圈全能架构师的博客 1932

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

如何优雅地关闭SpringBoot应用程序?听我给你讲

前言 Hi,大家好,我是麦洛,今天来聊聊如何优雅地关闭SpringBoot应用程序,有需要交流的朋友,可以私信我或者加我微信:miloleex都可以哈 在我们日常开发中,我们如何启停服务?可能下面的命令在熟悉不过了。 ps -ef|grep 8888 kill -9 8888 ./startup.sh ;tail -f ../logs/catalina.out 暴利美学式的启停服务真的安全吗?今天我们来了解如何安全、优雅地停止 Spring Boot 应用程序,而不会使任何当前处理的请求失败或不中断正在.

麦叔 3694

Spring Boot优雅关闭全解析

Spring Boot 优雅关闭功能详解:支持 Jetty、Tomcat 等主流服务器,通过配置 server.shutdown=graceful 可启用。该功能会在应用关闭时停止接收新请求,但允许现有请求在超时时间(spring.lifecycle.timeout-per-shutdown-phase)内完成。不同服务器实现方式不同,Tomcat 需 9.0.33+版本。注意需通过 SIGTERM 信号触发(IDE 可能不支持)。适用于生产环境部署,能有效避免请求中断,提升系统稳定性。

m0_37607945的博客 727

SpringBoot自带优雅关闭

官方介绍 Spring Boot 2.3.0 available now Graceful shutdown Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. When a grace period is configur

攻城狮 344

springboot项目的优雅关闭方式(更新部分细节)

本案例使用的是springboot2.0.4 当把打包好的jar包发布到服务器,并通过java -jar运行,一般要把springboot项目关闭大多数都是先找到项目的pid,然后直接kill pid,不过这种方法在特殊需求场景下不太合适(不安全),同时也不优雅。下面通过actuator来让springboot项目关闭优雅化。 先导入maven依赖 <dependency>...

西门飘雪的博客 666

boot优雅关机 spring_Get Spring Boot 2.3 优雅关闭的新姿势

Spring Boot 2.3有个新特性叫:Graceful shutdown(优雅关闭)下面是官方的说明:Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-...

weixin_36017951的博客 164

Spring Boot 2.3 优雅关闭新姿势,真香!

最新的 Spring Boot 2.3 发布快半个月了: https://spring.io/blog/2020/05/15/spring-boot-2-3-0-available-now 其中有个新特性叫:Graceful shutdown(优雅关闭) 之前也分享过这样的文章,现在竟然出品官方姿势了,新功能嘛,肯定得去官方看下,下面是官方的说明: Graceful shutdown is supported with all four embedded web servers (Jetty, Rea

Java技术栈,分享最主流的Java技术 3188

SpringBoot实现优雅的关机

最近在公司使用了 Springboot 项目, 发现在 linux 上 通过 java -jar 命令可以十分安全的运行, 但是 当我们需要关闭它的时候呢? 难道 登陆服务器 kill 线程??? 在网上查找了相关的文档 :https://www.cnblogs.com/lobo/p/5657684.html 该文章中比较详细的讲解了 两种关闭SpringBoot项目...

weixin_30664539的博客 123

SpringBoot应用在k8s中优雅停机的3个常见坑点及解决方案(附完整配置)

本文深入剖析了SpringBoot应用在Kubernetes环境中实现优雅停机的三大常见陷阱:探针配置不当、preStop钩子失效以及应用内逻辑缺失。文章提供了从独立管理端口配置、健壮的preStop脚本到SpringBoot 2.3+的server.shutdown配置等系统性解决方案,并附带了完整的K8s Deployment与SpringBoot配置示例,确保服务下线时能平滑处理现有请求,避免流量损失。

rgv23456789的博客 174

Springboot web应用优雅关闭浅谈

当Springboot Web(2.3.0前) 应用通过nginx负载均衡, 应用节点进行滚动重启时, 发现nginx会将请求转发到处于shutdown阶段的节点. 此时由于应用内资源已释放(e.g singletion destruction), http请求将无法得到适当的处理, 从而影响系统运行/用户体验.

fanduifandui的博客 1009

springboot 优雅停机_Spring Boot 系列:最新版优雅停机详解

世界上最快的捷径,就是脚踏实地架构技术专栏:http://www.jiagoujishu.com开源项目:分布式监控(Gitee GVP最有价值开源项目 ):https://gitee.com/sanjiankethree/cubic摄像头视频流采集:https://gitee.com/sanjiankethree/cubic-video优雅停机目前Spring Boot已经发展到了2....

weixin_39993989的博客 343

SpringBoot Netty socket使用

总之,通过以上步骤,可以在Spring Boot项目中使用Netty进行Socket编程。Netty提供了高性能和灵活的网络编程框架,适用于构建基于TCP/UDP的网络应用。

高性价比服务器就选:蓝易云 684
上一篇: mybatis遍历foreach中or拼接
下一篇: 多模块Maven项目统一修改版本号
Chery Qi
博客等级 码龄10年 154粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值