Spring Boot 应用程序失败,退出代码为 0
Posted
技术标签:
【中文标题】Spring Boot 应用程序失败,退出代码为 0【英文标题】:Spring Boot application fails with exit code 0 【发布时间】:2018-01-29 00:15:46 【问题描述】:我在 IntelliJ 中编写了一个 Spring Boot + Spring Batch 应用程序,如果它遇到任何配置问题,它会在启动时失败,这是预期的。但是IntelliJ中显示的应用程序的退出码还是0。0错误码不就代表成功了吗?我应该怎么做才能让应用程序返回正确的退出代码?
【问题讨论】:
这是意料之中的。 您能详细说明一下吗? 请添加用于“失败”启动的代码。如果您使用过 System.exit() 那么它使用默认值。根据您的需要更改它。 IntelliJ 不会自定义退出代码,因为它确实不知道应用程序逻辑 【参考方案1】:如果您已将其编程为退出,它可能仍为 0。您可以通过构建 ExitCodeGenerator 对其进行自定义。
http://www.logicbig.com/tutorials/spring-framework/spring-boot/app-exit-code/
【讨论】:
【参考方案2】:这太尴尬了! SpringApplication.run()
有一个非常奇怪的启动过程,包括产生一个新线程来完成工作和 yada yada。在执行此操作的过程中,它会调用 SilentExitExceptionHandler.setup(thread)
,其副作用是确保任何退出代码始终为 0!
如果您想解决这个问题,您可以使用未捕获的异常处理程序。
您也可以这样做:
try
SpringApplication.run(...);
catch(RuntimeException ex)
throw new RuntimeException(ex);
通过包装异常,spring 不会将其识别为特殊异常,因此会以错误代码 1 退出。但是有副作用 - 尤其是将异常记录到 stderr,但它也会忽略任何ExitCodeGenerator
bean 你已经设置好了。
【讨论】:
【参考方案3】:经过大量挖掘,我发现添加spring-boot-devtools
意味着如果配置错误,Spring 将以 0 退出。见这里:https://github.com/spring-projects/spring-boot/issues/28541
【讨论】:
以上是关于Spring Boot 应用程序失败,退出代码为 0的主要内容,如果未能解决你的问题,请参考以下文章
当 spring-boot 运行时 IntelliJ 进程以退出代码 0 完成
Spring Boot - 控制器测试失败并出现 404 代码
为spring boot应用程序生成war包时maven构建失败?