SpringBoot优雅下线

一,什么是优雅下线

当我们需要部署新版本代码的时候,需要重启服务,这个时候可能会出现一些问题,比如之前服务正在处理的请求还在处理,这个时候如果强制的停止服务,会造成数据丢失或者请求失败的情况。那么就需要有一种功能,当我们发出停止指令的时候,停止接收所有外部的请求,然后处理完已经接收的正在处理的请求,之后,再停止服务。这就是优雅下线。

优雅下线,也叫优雅关闭,包含以下操作:

  • 停止接受新的请求
  • 等待所有正在处理的请求完成
  • 关闭所有连接和资源
  • 释放所有内存和 CPU 资源

二,配置

server:shutdown: graceful
spring:lifecycle:timeout-per-shutdown-phase: 60000

1,server.shutdown: 控制关闭行为,可选值包括 immediate 和 graceful

immediate: 立即关闭应用,不等待正在处理的请求完成。

graceful: 优雅关闭应用,等待正在处理的请求完成。

2, spring.lifecycle.timeout-per-shutdown-phase 超时时间,就是到了这个时间不管正在处理的请求是否完成都会关闭(如果有hook配置,可以超过这个时间的配置), 单位是毫秒。

三,案例

1,没有配置hook,系统在到了超时时间的时候就强制关闭。

模拟一个接口执行100秒,调用后立马停止项目,配置的超时时间是5000毫秒。

Waiting for workers to finish.

Successfully waited for workers to finish.

Commencing graceful shutdown. Waiting for active requests to complete

到了5000毫秒后,强制关闭
Shutdown phase 2147482623 ends with 1 bean still running after timeout of 5000ms: [webServerGracefulShutdown]
 Exception java.lang.RuntimeException: java.lang.InterruptedException: sleep interrupted
Graceful shutdown aborted with one or more requests still active

2,如果需要延时,让代码执行完,系统再停止。可以添加一个hook。

先触发这个测试接口,把hook加到Spring容器,在去关闭项目,这个时候项目不会在超时时间后立马关闭,而是等到这个hook里面的逻辑执行完才关闭。

四,额外的说明

在Linux服务器上部署服务时,脚本里也需要注意一下kill命令的参数

kill -9 pid  是立即关闭服务

kill -15 pid 是发送关闭服务信号,服务接收到信号后,不再接收新的请求,并会在处理完已接收的请求之后再停止服务。

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

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

相关文章

后端Web开发

一、Maven (一)、概述 视频中要用的是jdk11 (二)、 idea集成Maven 1.配置Maven环境 2.创建Maven项目 3.导入Maven项目 法一: 法二: (三)、依赖管理 1.依赖配置 2.依赖传递 3.依…

数控机械制造工厂ERP适用范围有哪些

在当今制造业高速发展的背景下,企业资源计划(ERP)系统已成为提升工厂管理效率、实现生产自动化与信息化的关键工具。特别是对于数控机械制造工厂而言,一个合适的ERP系统能够帮助其优化生产流程、提高产品质量、降低生产成本并增强市场竞争力。 1. 生产计…

06 算法基础:算法的定义、表现形式(自然语言、伪代码、流程图)、五个特性(有穷性、确定性、可行性、输入、输出)、好算法的设计目标

目录 1 算法的定义 2 算法的三种表现形式 2.1 自然语言 2.2 伪代码 2.3 流程图 3 算法的五个特性 3.1 有穷性 3.2 确定性 3.3 可行性 3.4 输入 3.5 输出 4 好算法的设计目标 4.1 正确性 4.2 可读性 4.3 健壮性 4.4 通用性 4.5 高效率与低存储量 1 算法的定义 …

Java笔记-static关键字

1.static关键字内存说明 2.访问特点 package com.test.Statics2;import com.test.statics.Student;public class Test {public static void main(String[] args) {// 静态成员中访问非静态成员// method3() // 错误-不能直接调用,需要new对象调用Test test01 new T…

英伟达开源超强模型Nemotron-70B;OpenAI推出Windows版ChatGPT桌面客户端

🦉 AI新闻 🚀 英伟达开源超强模型Nemotron-70B 摘要:英伟达近日开源了新型AI模型Nemotron-70B,迅速超越GPT-4o和Claude 3.5 Sonnet,成为AI社区的新宠。该模型在多项基准测试中表现优异,采用混合训练方法和…

STM32CUBEIDE新建工程

新建工作区 可以在下面的目录创建工作区,来管理不同的工程,其中有一个是第一次打开软件的时候创建的。 新建一个工程 使用stm32cubeMX生成程序 生成之后直接打开,由于有一些.c.h文件是我们自己建立的,所以需要手动添加进工程…

Linux的开发工具gcc Makefile gdb的学习

一:gcc/g 1. 1 背景知识 1. 预处理(进行宏替换) 预处理 ( 进行宏替换 ) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结…

Unicode编码检查, 字符计算, Utf8与Utf16互转, GBK字符计算

CUnicodeUtils #pragma once #include <stdint.h> #include <string>class CUnicodeUtils { public:// // brief: 获取UTF16字符个数// param: pData 数据(UTF16编码, 大端字节序或小端字节序, 可包含BOM)// param: size 数据长度(字节)//…

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间&#xff0c;比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的&#xff0c;用的好与不好会给我们的业务甚至功能带来很大的影响。所以…

对话型AI:Auto Possess Player Auto Possess AI

Auto Possess Player “Auto Possess Player” 是一个常见于游戏开发&#xff0c;尤其是在 Unreal Engine 中的术语。它指的是一个功能或设置&#xff0c;使得一个特定的角色或对象在游戏开始时自动接管玩家的控制权。以下是一些关键点&#xff1a; 含义 自动控制&#xff…

STM32外设之ADC应用--寄存器开发

1.ADC简介 模数转换器&#xff08;Analog-to-Digital Converter&#xff0c;简称ADC&#xff09;是一种重要的电子设备&#xff0c;它能够将模拟信号转换为数字信号。是一种将连续变化的模拟信号转换为离散的数字信号的电子设备。这种转换使得模拟信号可以在数字系统中进行处理…

A-23OH型树脂在汽车涂装行业溶剂回收中的应用

随着汽车制造业的不断发展&#xff0c;市场竞争愈发激烈。为了提升生产柔性、生产效率和成本效益&#xff0c;同时确保喷漆质量并满足日益增长的非标和定制化设计需求&#xff0c;汽车生产商需要寻求更加高效、环保的解决方案。 其中&#xff0c;水性涂料的应用已经成为一种趋势…

Maven 快速入门

Maven 快速入门 一、简介1、概述2、特点3、工作原理4、常用命令5、生命周期6、优缺点&#x1f388; 面试题 二、安装和配置1、安装2、环境配置3、命令测试是否安装成功4、功能配置5、idea配置本地 maven6、maven 工程依赖包查询网站 三、基于IDEA创建Maven工程1、maven 工程中的…

Spring 的依赖注入的最常见方式

在 Spring 中&#xff0c;依赖注入的方式有多种选择。下面我们来逐一分析它们的特点、适用场景和注意事项&#xff1a; 1. 构造函数注入 构造函数注入要求在对象创建时提供所有依赖。这种方式确保依赖在对象创建后不可变&#xff0c;特别适合必须强制存在的依赖。所有依赖在对…

常用代码整理

字符串操作相关函数的实现 gets puts strlen strcat strncat strcpy strncpy strcmp strncmp memcpy 内存大小端判断 类型强制转换 联合 排序 选择排序 冒泡排序 插入排序 快速排序 先选一个基准值&#xff0c;通过双指针扫描并交换元素将数组划分为两部分&#xff0c;左…

6.计算机网络_UDP

UDP的主要特点&#xff1a; 无连接&#xff0c;发送数据之前不需要建立连接。不保证可靠交付。面向报文。应用层给UDP报文后&#xff0c;UDP并不会抽象为一个一个的字节&#xff0c;而是整个报文一起发送。没有拥塞控制。网络拥堵时&#xff0c;发送端并不会降低发送速率。可以…

gitee建立/取消关联仓库

目录 一、常用指令总结 二、建立关联具体操作 三、取消关联具体操作 一、常用指令总结 首先要选中要关联的文件&#xff0c;右击&#xff0c;选择Git Bash Here。 git remote -v //查看自己的文件有几个关联的仓库git init //初始化文件夹为git可远程建立链接的文件夹…

transformer的基础知识

transformer的基础知识 transformer网络结构图 seq2seq 一般Seq2seq会分成两部分:Encoder、Decoder。 Encoder Transformer 中的 Encoder 就是用的 Self-attention。 encoder的内部结构 补充:block的内部结构主要由self-attention和全连接神经网络所构成。 在原来的论…

TSmaster CAN的E2E检验配置

文章目录 一. 自定义E2E校验算法1. 导入DBC文件2. 模拟报文发送3. 自定义E2E算法 问题&#xff1a;C代码编辑器中 数据库头文件为空问题&#xff1a;C代码编辑器中 程序启动和暂停按钮为灰色 一. 自定义E2E校验算法 1. 导入DBC文件 点击载入CAN数据库&#xff0c;在弹窗中选择…

添加卡巴斯基杀毒软件(KES)的更新源

最近不知道怎么了&#xff0c;家里的电脑卡巴斯基&#xff08;KES&#xff09;怎么更新都更新不了&#xff0c;在网上找到了几个卡巴斯基的服务器: 添加步骤&#xff1a; 1.双击右下角的卡巴斯基图标。 2.依次按如下图示添加&#xff1a; 以下这步是最关键的&#xff0c;一定要…