如何在启动期间终止 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 应用程序启动期间创建许多 kafka 主题?
Spring Cloud FeignClients 在应用程序启动期间无法正常工作