《学会 SpringBoot · 优雅停机方案》

news2024/9/22 0:53:23

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 优雅停机
      • 技术简介
      • 实现步骤
      • 自定义方式
    • 总结陈词

CSDN.gif


优雅停机

技术简介

在 Spring Boot 中,“优雅停机”(Graceful Shutdown)指的是在应用程序关闭时,能够优雅地处理正在进行的请求和任务,而不是强制立即终止。这种机制可以确保在应用程序关闭时,现有的请求能够被处理完毕,避免数据丢失或请求失败。

优雅停机的特点

  • 处理现有请求:在接收到关闭信号后,应用会停止接收新的请求,但会继续处理已经接收到的请求。
  • 可配置的超时:可以配置一个超时时间,在这个时间内,应用会尝试完成所有正在进行的请求。如果超时后仍有请求未完成,应用会强制关闭。
  • 资源清理:在关闭过程中,可以执行一些清理操作,比如关闭数据库连接、释放资源等。

支持的版本
优雅停机功能在 Spring Boot 2.3 中首次引入,并在后续版本中得到了增强和改进。Spring Boot 3 继续支持和优化这一特性。


实现步骤

Step1、添加依赖:首先确保你的Spring Boot项目中包含了Spring Boot Actuator的依赖。

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

Step2、启用端点:默认情况下,ShutdownEndpoint是禁用的。你需要在application.properties或application.yml文件中启用它。

# 很多资料仅配置shutdown,会提示 No static resource actuator/shutdown
management:

  endpoints:
    # 暴露所有端点信息,设置为false比较安全,端点需要的单独打开
    enabled-by-default: true

    #以web方式暴露
    web:
      exposure:
        include: '*'

Step3、使用端点:一旦启用了 ShutdownEndpoint,你可以通过HTTP请求来触发应用程序的关闭。

# 使用curl命令,这会导致应用程序开始关闭过程。
curl -X POST http://localhost:8082/actuator/shutdown

会输出如下信息:

{
    "message": "Shutting down, bye..."
}

温馨提示:基于安全考虑,由于这个端点会关闭应用程序,所以通常只应该在受保护的环境中使用,例如通过安全框架如Spring Security 限制访问。


自定义方式

您可以通过以下几种方式实现优雅关机时的自定义逻辑:
1、使用 @PreDestroy 注解
在 Spring 管理的 bean 中使用 @PreDestroy 注解,可以在 bean 被销毁之前执行一些清理逻辑。

@Component
public class MyService {

    @PreDestroy
    public void cleanup() {
        System.out.println("Cleaning up resources...");
    }
}

2、实现 ApplicationListener 接口
您可以实现 ApplicationListener 接口,以便在应用程序上下文关闭时执行特定操作。

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component;

@Component
public class MyContextClosedListener implements ApplicationListener<ContextClosedEvent> {

    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        // 执行清理操作
        System.out.println("Application context is closing...");
    }
}

3、使用 SpringApplication 的 addListeners 方法
在启动应用程序时,您可以向 SpringApplication 添加自定义监听器,以便在应用程序关闭时执行特定操作。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.addListeners((ApplicationListener<ContextClosedEvent>) event -> {
            System.out.println("Application is shutting down...");
        });
        app.run(args);
    }
}

4、自定义类继承ShutdownEndpoint,具体方法后续展开。


总结陈词

此篇文章介绍了SpringBoot 项目中如何进行优雅停机的相关知识,仅供学习参考。
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

CSDN_END.gif

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

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

相关文章

C语言文达学院班级管理系统-计算机毕业设计源码03499

摘 要 本文阐述了一个C语言文达学院班级管理系统的设计与实现过程。该系统充分利用ASP.NET的轻量级、灵活性和可扩展性&#xff0c;旨在为文达学院提供高效、便捷的班级管理系统。通过详细的需求分析、技术选型、系统设计、开发实现、测试与调试以及部署与上线等步骤&#xff0…

程序员常用的工具软件推荐(提高工作效率和代码质量)

前言 我们在日常开发过程中&#xff0c;通常需要借助多款开发工具来提高工作效率和代码质量。今天大姚分享一些比较实用且高效的开发工具&#xff0c;希望可以帮助到有需要的同学。 程序员常用的工具软件 以上工具都已收录到程序员常用的工具软件栏目中&#xff0c;欢迎关注…

边缘计算技术解决行业痛点,TSINGSEE智能分析网关V4技术特点与应用场景解析

一、行业背景 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;边缘计算硬件作为其核心组成部分&#xff0c;正逐步成为市场的新宠。这些硬件不仅提升了数据处理和分析的效率&#xff0c;还极大地降低了数据传输的延迟&#xff0c;为各行各业的智能化转型提…

【git使用】本地文件上传到github已有仓库以及后续版本控制op(持续更新,20240810)

git使用 0.写在前面1. 本地与远程的连接1.0 本地仓库op1.1 暂存仓库op1.3 创建keygen进行SSH连接1.4 远程仓库op1.5 残留问题 reference2.更新与版本控制&#xff08;后续更新&#xff09; 0.写在前面 相信有一堆人到现在还没用清楚git进行项目管理&#xff0c;&#xff0c;&a…

【Python实现代码视频/视频转字符画/代码风格视频】

该程序改良自GitHub开源项目VideoCharDraw 在源程序CharDraw_thread.py 带压缩和多线程版本字符画的基础上使用Tkinter库添加了图形化的操作&#xff0c;使用户操作体验更方便。 什么是视频字符画&#xff1f; 视频转字符画是一种将视频中的每一帧图像转换为由字符组成的图…

Java设计模式-抽象工厂模式-一次性理解透

1. 抽象工厂模式简介 抽象工厂设计模式是创建型模式之一。抽象工厂模式与工厂模式几乎相似&#xff0c;只是它更像工厂中的工厂。 如果您熟悉Java 中的工厂设计模式&#xff0c;或看过上一篇我写的“java简单工厂模式”&#xff0c;您会注意到我们有一个工厂类。此工厂类根据…

WPF篇(18)-DataGrid数据表格控件+ComboBox下拉框控件

DataGrid数据表格控件 DataGrid是一个可以多选的数据表格控件。所以&#xff0c;它继承一个支持多选的父类——MultiSelector。 public abstract class MultiSelector : Selector {protected MultiSelector();public IList SelectedItems { get; }protected bool CanSelectMu…

Animetronic - hackmyvm

简介 靶机名称&#xff1a;Animetronic 难度&#xff1a;简单 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmAnimetronic 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Animetronic&#xff09;&#xff1a;192.168.130.188 windows_…

Golang 为何如此之快:性能分析

Golang 是一种相对年轻但很流行的语言&#xff0c;IBM 和 Google 等公司都在使用这种语言。在本文中&#xff0c;我们将了解 Golang 的特别之处。 Golang 被认为是世界上编译速度最快的语言之一。谷歌、Uber 和 Twitch 等科技公司都喜欢使用它&#xff0c;并依靠它进行内部开发…

HarmonyOS(50) 截图保存功能实现

componentSnapshot实现截图 前言权限配置和申请权限配置权限申请 componentSnapshot截图实现将PixelMap转换成图片格式保存截图到系统相册保存截图到应用沙箱全部源码参考资料 前言 HarmonyOS提供了componentSnapshot实现组件截图功能&#xff0c;可以将UI截图成为image.Pixel…

WMS助力企业数字化转型(七)

WMS系统可以帮助企业实现更精确的库存控制&#xff0c;避免库存积压和缺货现象。通过对历史数据的分析&#xff0c;企业可以预测需求趋势&#xff0c;优化库存结构&#xff0c;从而减少资金占用和运营成本。同时&#xff0c;WMS还支持与其他系统的无缝对接&#xff0c;如企业资…

限时营销与开源AI智能名片O2O商城小程序的深度融合:重塑线上促销策略的新视角

摘要&#xff1a;在数字化营销日益激烈的今天&#xff0c;限时促销活动作为吸引用户注意力、激发购买欲望的传统手段&#xff0c;面临着前所未有的挑战。随着线上营销活动的泛滥&#xff0c;消费者对传统折扣策略已逐渐产生疲劳与免疫。因此&#xff0c;探索一种更加高效、精准…

开放式耳机最不伤耳吗?舒适度高的几款精选蓝牙耳机

开放式耳机对耳朵的伤害相对较小&#xff0c;但不能说它是最不伤耳的耳机。 与传统入耳式耳机相比&#xff0c;开放式耳机的优点在于不会深入耳道&#xff0c;减少了对耳朵的压迫感和耳道内的压力&#xff0c;佩戴起来更加舒适。同时&#xff0c;开放式设计允许空气流通&#…

免费简单的制作3D卡通建模——Fuse软件和Readyplayer的使用介绍

最终效果 文章目录 最终效果一、使用Fuse软件去Steam下载安装捏人选择身体部位自定义人物细节参数换装贴图修改导出OBJ文件即可 二、使用ReadyplayerReadyplayer官网地址选择从模板开始&#xff0c;或者拍照选择图片进行捏脸将模型导入Unity通过Readyplayer官方插件导入模型通过…

白盒测试-发送请求-引出MockMvc源码类

白盒测试是什么&#xff1f; 一般是测开做白盒测试&#xff0c;研发做白盒 spring boot是和junit结合 原本是jmeter发请求&#xff0c;是看不到代码逻辑&#xff0c;有接口信息就可以实现 用测试代码发请求&#xff0c;能看到代码逻辑&#xff0c;比接口测试更全面&#xf…

大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光

大恒相机通过Line2或Line3直接给出3.3V触发&#xff0c;形成分时曝光 一、分时曝光需求二、3.3V信号分时曝光设计 写在前面 上班了&#xff0c;没多少时间再去精度论文了&#xff0c;大多是项目上的事情。 一、分时曝光需求 一般的12V光源通过光源控制器与大恒相机Line1线连接…

PDF转换器推荐:轻松将图片批量转为PDF

高质量的图片与文档管理已经逐渐成为了我们日常工作中不可或缺的一部分。为了防止图片在传输的过程中被压缩&#xff0c;我经常将他们转换为PDF格式。这次我给你推荐几个我常用的图片转PDF的小工具吧。 1.福昕PDF转换大师 链接一下>>https://www.pdf365.cn/pdf2word/ …

关于自己部署AI大模型踩的坑(一)——硬件篇

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.&#xff08;钢铁侠中的机器人管家&#xff09;。 上一篇写了我最近在部署自己的大模型&#xff0c;使用llama3.1&#xff0c; 和通义千问2。虽然最终结果也是成功了&#xff0c;过程却十分地坎坷。 所以这一篇文章一是总结其中…

keepalived基础

目录 1 高可用集群简介 1.1 高可用的概念 1.2 常见的 HA 集群 1.3 高可用集群软件 2 keepalived的功能与用途 2.1 LVS directors failover功能 2.2 LVS cluster nodes healthchecks功能 3 VRRP协议介绍 4 Keepalived 架构 5 原理总结 1 高可用集群简介 1.1 高可用的概念 高可…

数据埋点系列 5|数据驱动决策:形成数据驱动文化

在过去的几篇文章中&#xff0c;我们深入探讨了数据埋点、数据质量保证、数据分析和可视化等主题。现在&#xff0c;让我们站在更高的视角&#xff0c;讨论如何将这些技术和方法整合到实际的业务决策中&#xff0c;以及如何在组织中建立真正的数据驱动文化。 目录 1. 回顾&am…