【发布时间】:2016-12-29 03:19:50
【问题描述】:
我有一个 Spring Boot 应用程序实现了 CommandLineRunner。如果发生任何错误/异常,我想返回 -1 作为退出代码,如果没有异常则返回 0。
public class MyApplication implements CommandLineRunner{
private static Logger logger = LoggerFactory.getLogger(MyApplication.class);
@Override
public void run(String... args) throws Exception {
// to do stuff. exception may happen here.
}
public static void main(String[] args) {
try{
readSetting(args);
SpringApplication.run(MyApplication.class, args).close();
}catch(Exception e){
logger.error("######## main ########");
java.util.Date end_time = new java.util.Date();
logger.error(e.getMessage(), e);
logger.error(SystemConfig.AppName + " System issue end at " + end_time);
System.exit(-1);
}
System.exit(0);
}
...
}
我尝试过System.exit()、SpringApplication.exit(MyApplication.context, exitCodeGenerator)等,但是当我抛出异常时它仍然返回0!
我已经尝试过这里的解决方案:
https://sdqali.in/blog/2016/04/17/programmable-exit-codes-for-spring-command-line-applications/
请帮忙!
【问题讨论】:
-
也许您应该将
System.exit(-1)移动到public void run并且不要在主目录中使用它。 -
谢谢@Patrick,我也试过了,仍然返回 0。
-
您的第一个来源提到了 ExitCodeGenerator。您唯一缺少的是调用 SpringApplication.exit,请参阅下面的答案。
标签: java spring-boot exit-code