码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用 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 {
      
      	@Resource
      	private WebApplicationContext applicationContext;
      
          @Override
          public void run(ApplicationArguments args) {
        	   // 具体什么时候调用,根据实际情况定
      	    if(xxx){
      	        System.out.println("调用方法,关闭SpringBoot");
          	   // 如果初始化失败或者其他失败情况,则调用System.exit()方法
                 System.exit(SpringApplication.exit(applicationContext));
          	}
      	}
      }	
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

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

      补充:
      通过 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);
          	}
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

        在这里插入图片描述

      • 相关阅读:
        【Jlink & C#】通过C#实现Jlink RTT上位机的功能
        代码随想录算法训练营第五十八天| 583. 两个字符串的删除操作 72. 编辑距离
        浏览器线程
        Azure DevOps (十) 通过流水线完成Docker镜像的部署
        MyBatisPlus详解
        Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类
        thymeleaf中的日期格式转化
        2024年2月19日-2月25日(全面进行+收集免费虚幻商城资源,20小时,合计2561小时,剩余7439小时)
        TDSQL PG版节省30%磁盘空间的同时如何保障数据安全?|DB·洞见
        java计算机毕业设计医院门诊挂号系统源程序+mysql+系统+lw文档+远程调试
      • 原文地址:https://blog.csdn.net/zhuocailing3390/article/details/132649956
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号