使用 System.exit() 来优雅地终止 Spring Boot 项目

😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: 使用 System.exit() 来优雅地终止 Spring Boot 项目
⏱️ @ 创作时间: 2023年09月04日

在这里插入图片描述

目录

  • 前言
  • 应用

前言

System.exit():
System.exit() 方法是 Java 中用于退出程序的方法。它接受一个整数参数,通常被用来指示程序的退出状态。一般约定,如果程序正常退出,通常返回值为 0,而如果程序出现错误或异常退出,返回值可以是其他非零值,用于指示错误的类型或状态。

需要注意的是,System.exit() 是一种强制退出程序的方式,它会立即终止程序的执行,不会执行任何未完成的代码或清理操作。因此,在正常情况下,应该尽量避免滥用这个方法,而是通过正常的控制流程来退出程序。

SpringApplication.exit():
SpringApplication.exit Spring Boot 提供的方法,用于优雅地终止 Spring Boot 应用程序。它的作用是允许你触发应用程序的关闭操作,这将导致 Spring Boot 应用程序执行关闭钩子(shutdown hooks)和销毁生命周期中的 Bean 等清理工作,以确保应用程序在退出之前可以完成一些清理工作、资源释放或其他必要的操作。

应用

在开发中,有可能存在以下场景:

  • 启动项目时验证项目是否已经授权,如果没有授权则停止启动。
  • 启动项目后需要进行各类初始。如果初始化失败则停止启动。

为了实现停止SpringBoot项目运行我们需要使用到System.exit()方法。
System.exit()接受一个int参数,如果为0正常退出;为非0的其他整数,表示非正常退出当前程序。其实不管传什么数值都会导致系统的停止

具体使用如下:
假如我们的初始化操作,如下所示:

@Component
public class SystemApplicationRunner implements ApplicationRunner {@Resourceprivate WebApplicationContext applicationContext;@Overridepublic void run(ApplicationArguments args) {// 具体什么时候调用,根据实际情况定if(xxx){System.out.println("调用方法,关闭SpringBoot");// 如果初始化失败或者其他失败情况,则调用System.exit()方法System.exit(SpringApplication.exit(applicationContext));}}
}	

效果:
在这里插入图片描述

补充:
通过 System.exit(SpringApplication.exit(applicationContext));方式时,系统会自动判断传0还是非0,我们也可以自主传入参数,比如:

public class Test {public static void main(String[] args) {if(xxx){System.out.println("调用方法,关闭项目");// 如果初始化失败或者其他失败情况,则调用System.exit()方法System.exit(0);}}
}

在这里插入图片描述

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

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

相关文章

IIS解析漏洞复现

文章目录 漏洞复现总结 漏洞复现 打开虚拟机,在C:\inetpub\wwwroot\8000_test目录下放一个phpinfo.php文件: 在服务器管理器中打开IIS管理器,选择处理映射程序: 点击添加模块映射: 配置映射模板,php文件…

【猿灰灰赠书活动 - 06期】- 【计算机考研书单——408专属】

👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨‍💻本文简述:博文为大家争取福利,与机械工业出版社合作进行送书活动 👨‍&#x1f…

​消费盲返模式:一种让消费者和商家都受益的新型消费返利模式

您是否想过,如果您的消费能够带来意想不到的回报,您会不会更愿意购买商品或服务呢?您是否想过,如果您的商品或服务能够吸引更多的消费者,并让他们成为您的忠实客户,您会不会更有动力经营您的业务呢&#xf…

一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?

一、目的 在Hive的DWD层和DWS层建立动态分区表后,发现动态插入数据时可以指定分区名,也可以不指定分区名。因此,研究一下它们的区别以及使用场景,从而决定在项目的海豚调度HiveSQL的脚本里需不需要指定动态分区的分区名&#xff…

【数据结构】长篇详解堆,堆的向上/向下调整算法,堆排序及TopK问题

文章目录 堆的概念性质图解 向上调整算法算法分析代码整体实现 向下调整算法算法分析整体代码实现 堆的接口实现初始化堆销毁堆插入元素删除元素打印元素判断是否为空取首元素实现堆 堆排序创建堆调整堆整合步骤 TopK问题 堆的概念 堆就是将一组数据所有元素按完全二叉树的顺序…

记录一次Docker与Redis冲突

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 报错以及Bug ✨特色专栏: …

避坑之路 —— 前后端 json 的注意问题

当我们在进行开发项目的时候,在前后端需要进行数据之间的传输,那么就会需要到json。而json算是字符串中的一种 1.先说一下前端的, 其实这两种都是表示前端希望能收到后端json这样的数据格式,那么我们在后端就需要注意将数据进行转换为json进…

深度学习模型复杂度分析大杂烩

深度学习模型复杂度分析大杂烩 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过: 计算量/FLOPS(时间复杂度)即模型的运算次数 访存量/By…

数据结构与算法基础-学习-34-基数排序(桶排序)

目录 一、基本思想 二、算法思路 1、个位排序 (1)分配 (2)收集 2、十分位排序 (1)分配 (2)收集 三、源码分享 1、InitMyBucket 2、DestroyMyBucket 3、ClearMyBucket 4、…

软件测试/测试开发丨使用ChatGPT自动进行需求分析

简介 在实际工作过程中,常常需要拿到产品的PRD文档或者原型图进行需求分析,为产品的功能设计和优化提供建议。 而使用ChatGPT可以很好地帮助分析和整理用户需求。 实践演练 接下来,需要使用ChatGPT 辅助我们完成需求分析的任务 注意&…

【论文笔记】Baidu Apollo EM Motion Planner

文章目录 AbstractI. INTRODUCTIONA. Multilane StrategyB. Path-Speed Iterative AlgorithmC. Decisions and Traffic Regulations II. EM PLANNER FRAMEWORK WITH MULTILANE STRATEGYIII. EM PLANNER AT LANE LEVELA. SL and ST Mapping (E-step)B. M-Step DP PathC. M-Step …

01-Redis核心数据结构与高性能原理

上一篇: 1.Redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz…

【ArcGIS Pro二次开发】(67):处理面要素空洞

这个一个简单的小功能。 有些面要素可能会存在空洞,这个工具的目的就是获取面要素的空洞,或者去除空洞获取要素的边界。 这个功能其实在之前做拓扑功能的时候就已经有了,这次只是单独把它提取出来。因为有时候会单独用到这个功能。 一、要实…

面试半个月后的一些想法

源于半个月面试经历后的一些想法,刚开始想的是随便写写,没想到居然写了这么多。 找不到目标找不到意义亦或是烦躁的时候,就写写文章吧,把那些困扰你很久的问题铺开来 花时间仔细想想,其实真正让我们生气懊恼&#xff0…

JS中应该注意的点

本帖子记录在使用前端时遇到的一些小点。 1.html()和text()和val()的使用及区别 1.1 val() val&#xff08;&#xff09;是对于单标签元素的值&#xff0c;其中一个很重要的特性是value"" Value:<input id"input" type"text" value"LO…

MySQL高可用搭建方案之(MMM)

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 注意&#xff1a;这篇转载文章&#xff0c;非原创 首发博客地址 原文地址 前言 MySQL的高可用有很多种&#xff0c;有我们经常说的MMM架构、MHA架构、…

TGA格式文件转材质

今天淘宝上买了一个美女的模型&#xff0c;是blender的源文件&#xff0c;上面说有fbx格式的。我用unity&#xff0c;所以觉得应该可以用。文件内容如下图&#xff1a; FBX文件夹打开后&#xff0c;内容如下图所示&#xff0c;当时就预感到可能没有色彩。 unity打开后果然发现只…

笔记本选购指南

大学生笔记本电脑选购指南 文章目录 笔记本分类指标排行 了解自身需求理工科文科艺术总结 参考指标品牌CPU显卡屏幕其他 购买渠道推荐游戏本Redmi G 锐龙版联想G5000惠普光影精灵9天选4锐龙版联想R7000P暗影精灵9联想拯救者R9000P 全能本华硕无畏PRO15联想小新Pro14 2023 轻薄本…

『SpringBoot 源码分析』run() 方法执行流程:(3)刷新应用上下文-处理 @ComponentScan 注解

『SpringBoot 源码分析』run() 方法执行流程&#xff1a;&#xff08;3&#xff09;刷新应用上下文-处理 ComponentScan 注解 基于 2.2.9.RELEASE问题&#xff1a;当方法进行了注释标记之后&#xff0c;springboot 又是怎么注入到容器中并创建类呢&#xff1f; 首先创建测试主…

论文笔记:Deep Representation Learning for Trajectory Similarity Computation

ICDE 2018 1 intro 1.1 背景 用于计算轨迹相似性的成对点匹配方法&#xff08;DTW&#xff0c;LCSS&#xff0c;EDR&#xff0c;ERP&#xff09;的问题&#xff1a; 轨迹的采样率不均匀 如果两个轨迹表示相同的基本路径&#xff0c;但是以不同的采样率生成&#xff0c;那么这…