Spring Boot的exit code
Spring Boot的exit code
任何应用程序都有exit code,这个code是int值包含负值,在本文中我们将会探讨Spring Boot中的 exit code。
Spring Boot的exit code
Spring Boot如果启动遇到错误,则会返回1.正常退出的话则会返回0.
Spring Boot向JVM注册了shutdown hooks来保证应用程序优雅的退出。Spring Boot还提供了org.springframework.boot.ExitCodeGenerator接口,来方便自定义退出code.
自定义Exit Codes
Spring Boot提供了三种方式来让我们自定义exit code。
ExitCodeGenerator,ExitCodeExceptionMapper和ExitCodeEvent。下面我们分别来讲解。
ExitCodeGenerator
实现ExitCodeGenerator接口,我们需要自己实现getExitCode()方法来自定义返回代码:
@SpringBootApplication
public class ExitCodeApp implements ExitCodeGenerator {
public static void main(String[] args) {
System.exit(SpringApplication.exit(SpringApplication.run(ExitCodeApp.class, args)));
}
@Override
public int getExitCode() {
return 11;
}
}
这里我们调用了System.exit方法来返回特定的代码。
ExitCodeExceptionMapper
如果我们遇到runtime exception的时候,可以使用ExitCodeExceptionMapper来做错误代码的映射如下:
@Bean
CommandLineRunner createException() {
return args -> Integer.parseInt("test") ;
}
@Bean
ExitCodeExceptionMapper exitCodeToExceptionMapper() {
return exception -> {
// set exit code base on the exception type
if (exception.getCause() instanceof NumberFormatException) {
return 80;
}
return 1;
};
}
上面的例子我们创建了一个CommandLineRunner bean,在实例化的过程中会抛出NumberFormatException,然后在ExitCodeExceptionMapper中,我们会捕捉到这个异常,返回特定的返回值。
ExitCodeEvent
我们还可以使用ExitCodeEvent来捕捉异常事件如下所示:
@Bean
DemoListener demoListenerBean() {
return new DemoListener();
}
private static class DemoListener {
@EventListener
public void exitEvent(ExitCodeEvent event) {
System.out.println("Exit code: " + event.getExitCode());
}
}
当应用程序退出的时候,exitEvent() 方法会被调用。
本文的例子可以参考:https://github.com/ddean2009/learn-springboot2/tree/master/springboot-exitcode
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多教程请参考 flydean的博客
相关文章
- JavaWeb_(Spring框架)认识Spring中的aop
- 【Spring Boot】Spring Boot之两种引入spring boot maven依赖的方式
- spring boot: EL和资源 (一般注入说明(二) @Service注解 @Component注解)
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase
- Spring乱码问题解决方案
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- spring boot部署war包打包插件配置
- Spring Boot:定制PropertyEditors
- Spring Boot:定制自己的starter
- Atitit spring注解事务的demo与代码说明 目录 1.1. Spring框架中,要如何实现事务?有一个注解,@EnableTransactionManagement1 1.2. 事务管理
- 为什么Spring Boot推荐使用logback-spring.xml来替代logback.xml来配置logback日志的问题分析
- 如何使用Spring Cloud搭建高可用的Elasticsearch集群?详解Elasticsearch的安装与配置及Spring Boot集成的实现
- 为什么spring Boot是一个线程处理一个web请求而不是一个线程处理一次tcp连接?
- Spring Boot 之spring.factories
- Spring Boot 环境变量读取 和 属性对象的绑定
- spring boot + spring security +前后端分离【跨域】配置 + ajax的json传输数据
- spring security 登出操作 详细说明
- Spring Boot中使用 Swagger2 自动构建API文档
- 001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点
- 012-Spring Boot web【一】web项目搭建、请求参数、RestController、使用jsp、freemarker,web容器tomcat和jetty
- spring boot 启动错误:Could not resolve placeholder
- Spring MVC列表多选框
- 【java】Spring Boot --spring boot项目整合xxl-job