使用 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.mzph.cn/news/73189.shtml

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

相关文章

构建普适通用的企业网络安全体系框架

在当今数字化时代,网络安全已成为企业保护信息资产和业务运行的重要任务。恶意攻击、数据泄露、网络病毒等威胁不断演进,给企业和个人带来了巨大风险。为了应对这一挑战,许多企业已经采取了一系列网络安全措施,如制定了网络安全政…

CMU15445 fall 2022/spring 2023 项目环境搭建+选择合适的版本

前言 CMU15445是一门关于数据库管理系统(DBMS)的设计和实现的优秀课程。由数据库领域大佬Andy主讲,同时还有迟策大佬所设计和维护的BusTub,其名声在外之处更是有着极高质量的作业(HOMEWORKS)和项目&#x…

虚函数、纯虚函数、多态

一.虚函数 在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据所指对象的实际类型来调用相应的函数,如果对象类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数。 …

React基础

目录 TODO1 React概述 React的使用 React脚手架的使用 全局安装 npx安装 在脚手架中使用React JSX 1. JSX的基本使用 1.1 为什么用JSX 1.2 JSX简介 1.3 使用步骤 1.4 脚手架中能用JSX 1.5 注意点 2. 在JSX中使用JavaScript表达式 2.1 嵌入js表达式 2.2 注意点 3…

小节3:数据类型

Python的数据类型包括:字符串(str)、整数(int)、浮点数(float)、布尔类型(bool)、空值类型(NoneType)、列表(list)、字典&…

JUC P8 ThreadLocal 基础+代码

JUC P8 ThreadLocal 基础代码 教程:https://www.bilibili.com/video/BV1ar4y1x727?p100 引出问题 ThreadLocal 和 TreadLocalMap 数据结构关系? ThreadLocal 中的 key 是弱引用,为什么? ThreadLocal 内存泄漏问题是什么&#x…

协程 VS 线程,Kotlin技术精讲

协程(coroutines)是一种并发设计模式,您可以在Android 平台上使用它来简化异步执行的代码。协程是在版本 1.3 中添加到 Kotlin 的,它基于来自其他语言的既定概念。 在 Android 上,协程有助于管理长时间运行的任务,如果管理不当&a…

创邻科技图数据库课程走进一流高校

《图数据库原理和实践》 正式开课! 最近,浙江大学计算机学院新开了一门名为 《图数据库原理和实践》 的新课程,该课程由创邻科技和浙江大学联合推出,吸引了许多学生踊跃参与! 曾为浙大学子的创邻科技CTO周研博士作为…

51单片机-直流电机学习

简介 51单片机采用的是5V的直流电机 轴长:8mm 轴径:2mm 电压:1-6V 参考电流:0.35-0.4A 3V 转速:17000-18000 转每分钟 他的组成: 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止…

如何在 Ubuntu 上安装 Nagios?

Nagios 的功能 Nagios 的一些关键功能包括: 主机和服务监控: Nagios 允许您使用提供实时状态数据的插件来监控主机(可以是物理机或虚拟机)以及 HTTP、SSH 和 SMTP 等服务。此功能使您能够全面了解整个基础设施的运行状况和可用性…

Java(一)安装并使用 java(Windows)

安装并使用java 前言一、初识Java1.Java的安装1.1下载JDK1.2JDK安装与使用1.2.1安装1.2.2 IDEA(编译器)使用 2.Java运行编程逻辑(重要后面要用)总结 前言 学习很重要,复习也很重要,对于编程语言的复习更为…

开源|HDR-ISP开源项目介绍

引言 拖更很久了,本着出品必精的原则,我们更新就来点干货。想起刚入行时,网上并没有很多以及系统的ISP的学习资料,都是边工作、边搜集资料然后边学习,一路坎坎坷坷走到今天算是刚入了ISP的大门。 为了解决新人入门的…

JetBrains出品的IDE自动补全和提示文档设置

如题下图设置前景色和背景色: 效果如下图,标识1是Completion,标识2是Documentation:

1.8 工程相关解析(各种文件,资源访问

目录 1.8 工程相关解析(各种文件,资源访问) 分类 Android 基础入门教程 本节引言: 1.工程项目结构解析: 1.res资源文件夹介绍: 2.如何去使用这些资源 2.深入了解三个文件: MainActivity.java: 布局…

将 Qt Designer 的 ui 文件转换为 PySide2 使用的.py 文件

20201206 修订:在 Pyside2 的 5.15.2 版本中,从 ui 生成 py 文件过程,命令从 “uic” 变为 “pyside2-uic” Qt Designer 设计的 ui 文件,就是一个 xml 文件,通过 pyside-uic 可以转换成标准的.py 文件 。通过 QtDesi…

电商(淘宝1688京东拼多多等)API接口服务:提升商业效率和用户体验的关键

电商API接口服务:提升商业效率和用户体验的关键 随着电子商务的飞速发展,电商企业需要不断提升自身的业务能力和服务质量,以应对日益激烈的市场竞争。为了更好地满足商家和消费者的需求,电商API接口服务应运而生。本文将探讨电商…

Flink--2、Flink部署(Yarn集群搭建下的会话模式部署、单作业模式部署、应用模式部署)

星光下的赶路人star的个人主页 你必须赢过,才可以说不在乎输赢 文章目录 1、Flink部署1.1 集群角色1.2 Flink集群搭建1.2.1 集群启动1.2.2 向集群提交作业 1.3 部署模式1.3.1 会话模式(Session Mode)1.3.2 单作业模式(Per-Job Mod…

华为云云耀云服务器L实例评测|使用Linux系统与Docker部署.net/c#项目

目录 前言 如何在CentOS运行项目 登录CentOS 使用Rider打包 使用Visual Studio打包 项目运行 后台运行 开放端口 如何在Docker中运行项目 项目运行 前言 本章详细介绍,.net Core项目从打包到部署上华为云云耀云服务器L实例的过程与一些细节问题。在这里…

Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知

Outlook用户使用场景: 在企业中,会议和活动的顺利举行对于业务运转和团队协作至关重要。然而,计划的变动总是无法避免,这可能会导致其他人的计划受到影响,打乱原有的安排。为了解决这个问题,许多企业开始使…

快速构建基于Paddle Serving部署的Paddle Detection目标检测Docker镜像

快速构建基于Paddle Serving部署的Paddle Detection目标检测Docker镜像 项目介绍需要重点关注的几个文件构建cpu版本的docker构建gpu版本的docker(cuda11.2cudnn8) 阅读提示: (1)Paddle的Serving项目中,在t…