使用System.exit()來優(yōu)雅地終止SpringBoot項(xiàng)目的代碼示例
前言
System.exit():
System.exit():
System.exit() 方法是 Java 中用于退出程序的方法。它接受一個(gè)整數(shù)參數(shù),通常被用來指示程序的退出狀態(tài)。一般約定,如果程序正常退出,通常返回值為 0,而如果程序出現(xiàn)錯誤或異常退出,返回值可以是其他非零值,用于指示錯誤的類型或狀態(tài)。
需要注意的是,System.exit() 是一種強(qiáng)制退出程序的方式,它會立即終止程序的執(zhí)行,不會執(zhí)行任何未完成的代碼或清理操作。因此,在正常情況下,應(yīng)該盡量避免濫用這個(gè)方法,而是通過正常的控制流程來退出程序。
SpringApplication.exit():
SpringApplication.exit 是 Spring Boot 提供的方法,用于優(yōu)雅地終止 Spring Boot 應(yīng)用程序。它的作用是允許你觸發(fā)應(yīng)用程序的關(guān)閉操作,這將導(dǎo)致 Spring Boot 應(yīng)用程序執(zhí)行關(guān)閉鉤子(shutdown hooks)和銷毀生命周期中的 Bean 等清理工作,以確保應(yīng)用程序在退出之前可以完成一些清理工作、資源釋放或其他必要的操作。
應(yīng)用
在開發(fā)中,有可能存在以下場景:
- 啟動項(xiàng)目時(shí)驗(yàn)證項(xiàng)目是否已經(jīng)授權(quán),如果沒有授權(quán)則停止啟動。
- 啟動項(xiàng)目后需要進(jìn)行各類初始。如果初始化失敗則停止啟動。
為了實(shí)現(xiàn)停止SpringBoot
項(xiàng)目運(yùn)行我們需要使用到System.exit()
方法。System.exit()
接受一個(gè)int參數(shù),如果為0正常退出;為非0的其他整數(shù),表示非正常退出當(dāng)前程序。其實(shí)不管傳什么數(shù)值都會導(dǎo)致系統(tǒng)的停止
。
具體使用如下:
假如我們的初始化操作,如下所示:
@Component public class SystemApplicationRunner implements ApplicationRunner { @Resource private WebApplicationContext applicationContext; @Override public void run(ApplicationArguments args) { // 具體什么時(shí)候調(diào)用,根據(jù)實(shí)際情況定 if(xxx){ System.out.println("調(diào)用方法,關(guān)閉SpringBoot"); // 如果初始化失敗或者其他失敗情況,則調(diào)用System.exit()方法 System.exit(SpringApplication.exit(applicationContext)); } } }
效果:
補(bǔ)充:通過 System.exit(SpringApplication.exit(applicationContext));
方式時(shí),系統(tǒng)會自動判斷傳0還是非0,我們也可以自主傳入?yún)?shù),比如:
public class Test { public static void main(String[] args) { if(xxx){ System.out.println("調(diào)用方法,關(guān)閉項(xiàng)目"); // 如果初始化失敗或者其他失敗情況,則調(diào)用System.exit()方法 System.exit(0); } } }
以上就是使用System.exit()來優(yōu)雅地終止SpringBoot項(xiàng)目的代碼示例的詳細(xì)內(nèi)容,更多關(guān)于System.exit()終止SpringBoot項(xiàng)目的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解析Java中PriorityQueue優(yōu)先級隊(duì)列結(jié)構(gòu)的源碼及用法
優(yōu)先級隊(duì)列是一種隊(duì)列結(jié)構(gòu),是0個(gè)或多個(gè)元素的集合,每個(gè)元素都有一個(gè)優(yōu)先權(quán),PriorityQueue被內(nèi)置于JDK中,本文就來解析Java中PriorityQueue優(yōu)先級隊(duì)列結(jié)構(gòu)的源碼及用法.2016-05-05解決在Idea 2020.2下使用 Lombok的注解不生效的問題(插件安裝了,依賴也寫了,自動注解也設(shè)置了)
這篇文章主要介紹了在Idea 2020.2下使用 Lombok的注解不生效的問題(插件安裝了,依賴也寫了,自動注解也設(shè)置了),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08解決idea創(chuàng)建版本時(shí)只有Java21和Java17選項(xiàng)
你是否在使用IntelliJ?IDEA創(chuàng)建新項(xiàng)目時(shí)遇到了只有Java?21和Java?17的選項(xiàng)?別擔(dān)心,我們的指南將為你提供解決方案,通過簡單的步驟,你將能夠選擇你需要的任何Java版本,繼續(xù)閱讀,讓我們開始吧!2024-03-03解決若依pageHelper在動態(tài)切換數(shù)據(jù)源問題
這篇文章主要介紹了解決pageHelper在動態(tài)切換數(shù)據(jù)源問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01@ConfigurationProperties綁定配置信息至Array、List、Map、Bean的實(shí)現(xiàn)
這篇文章主要介紹了@ConfigurationProperties綁定配置信息至Array、List、Map、Bean的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05