Spring Boot 应用程序失败,退出代码为 0

标签 spring spring-boot intellij-idea exit-code

我在 IntelliJ 中编写了一个 Spring Boot + Spring Batch 应用程序,如果遇到任何配置问题,它会在启动时失败,这是预期的。但是在IntelliJ中显示的应用程序的退出代码仍然是0。0错误代码不意味着成功吗?我应该怎么做才能让应用程序返回正确的退出代码?

最佳答案

这做起来非常尴尬! SpringApplication.run() 有一个非常奇怪的启动过程,它涉及生成一个新线程来完成工作和 yada yada。在执行此操作的过程中,它会调用 SilentExitExceptionHandler.setup(thread),这具有确保任何退出代码始终为 0 的副作用!

如果您想解决这个问题,您可以展开未捕获的异常处理程序。

你也可以这样做:

try {
  SpringApplication.run(...);
}
catch(RuntimeException ex) {
  throw new RuntimeException(ex);
}

通过包装异常,spring 不会将其识别为特殊异常,因此将以错误代码 1 退出。然而,它有副作用 - 特别是它会将异常记录到 stderr,但它也会忽略任何ExitCodeGenerator 您已设置的 bean。

关于Spring Boot 应用程序失败,退出代码为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492784/

相关文章:

java - 正确的应用程序类路径,使其包含类 org.springframework.boot.autoconfigure.http.HttpMessageConverter 的兼容版本

Scala Intellij 断点被忽略

java - 如何在 JExcel (jxl) 中将格式化数字写入数字

java - 提供了至少 2 个参数,但按使用规范和排序查询时仅存在 1 个参数

java - Bean 轻量模式配置如何在 Bean 上创建代理

spring-boot - 在 Spring Boot 中设置 `security.oauth2.resource.jwk.key-set-uri` 时的预期行为是什么

java - IntelliJ IDEA 13 给出关于不兼容类型的无效错误(Play 中的 Java-Scala-InterOp)

java - 错误 : Gradle: error: package javax. 邮件不存在

java - 具有可配置凭据的 Spring WebServiceClient

java - 非 Spring 托管类上的 @Cacheable