如何在启动期间终止 Spring 应用程序?

Posted

技术标签:

【中文标题】如何在启动期间终止 Spring 应用程序?【英文标题】:How do I terminate a Spring application during startup? 【发布时间】:2015-10-14 21:38:30 【问题描述】:

我有一个 Spring Boot 应用程序,它有一些外部依赖项(例如,项目外部的文件需要存在才能使应用程序正常启动)。

我的一个 bean 有一个 @PostConstruct 方法来进行初始化。如果初始化不成功-例如找不到文件,我想干净而优雅地退出。

@PostConstruct方法中调用((ConfigurableApplicationContext)applicationContext).close();会导致

java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context

以及一系列其他异常。有没有办法正确地做到这一点?

【问题讨论】:

只要抛出一个异常... 我只是打电话给System.exit(0)。但我想要一个更好的解决方案。 System.exit(0) 是终止的“唯一”解决方案...... 【参考方案1】:

您可以使用系统退出静态方法,它终止当前运行的Java虚拟机。 传递的代码指示终止状态。按照惯例,非零状态码表示异常终止。

exp:

System.exit(0);

【讨论】:

【参考方案2】:

你不能在@PostConstruct中使用System.exit(0),关机会等待锁定startupShutdownMonitor,无法退出。

【讨论】:

呃,嘘......我半年前喜欢这个评论,但我忘记了这个重要的事情。现在我打开这个页面,看到我自己的喜欢,很好。再次感谢。

以上是关于如何在启动期间终止 Spring 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring boot启动期间关闭应用程序

如何在 spring-boot 应用程序启动期间创建许多 kafka 主题?

如何在应用程序退出()期间处理 Qthread 终止?

Spring Cloud FeignClients 在应用程序启动期间无法正常工作

来自 GDB 的消息“在启动程序期间以信号 SIGKILL 终止”

Spring Boot / REST - 示例代码在启动后终止