在sprintboot中,因为是大多数情况下,用application的方式去运行的,那么当程序退出的时候,其实是有个exitcode的,正常退出的时候,exitcode为0,否则为1,某些情况下,是可以自定义exitcode,可以用下面的方法:
@SpringBootApplication
public class SampleApplication implements ExitCodeGenerator {
public static void main(String[] args) {
System.exit(SpringApplication
.exit(SpringApplication.run(SampleApplication.class, args)));
}
@Override
public int getExitCode() {
return 25;
}
}
这里只需要实现ExitCodeGenerator就可以了,重写getExitCode()方法,返回自定义码。
而且我们可以监听退出的事件:
@Bean
SampleEventListener sampleEventListener() {
return new SampleEventListener();
}
private static class SampleEventListener {
@EventListener
public void exitEvent(ExitCodeEvent event) {
LOG.info("Application Exit code: {}", event.getExitCode());
}
}
还可以监听发生何种异常的时候,就使用什么样的退出码进行退出,比如:
@Bean
ExitCodeExceptionMapper exitCodeToexceptionMapper() {
return exception -> {
if (exception.getCause() instanceof NumberFormatException) {
return 34;
}
if (exception.getCause() instanceof CustomTypeException) {
return 45;
}
...
return 1;
};
}