【发布时间】:2026-02-16 00:20:03
【问题描述】:
我有一个 Web 应用程序,我试图通过在上下文中执行 close() 方法来关闭它:
((ConfigurableApplicationContext) appContext).close();
执行此操作后,应用程序似乎继续运行,健康页面产生以下异常:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
有没有办法通过 Spring 关闭整个事情,或者我应该求助于 System.exit()?
任何帮助将不胜感激!
【问题讨论】:
-
您几乎不应该使用
System.exit()。听起来您是在传统容器中运行应用程序,而不是使用 Spring Boot 嵌入式容器。在这种情况下,您需要使用容器的关闭命令。 -
@chrylis 是的,同意
System.exit()。我在传统的 servlet 容器中以传统方式运行应用程序。有没有办法以编程方式从我的 Spring 应用程序向 tomcat 或 jetty 发送关闭命令? -
我不确定。您必须能够访问管理界面,或者将
tomcat stop作为进程运行。迁移到嵌入式 servlet 容器是一种选择吗?听起来您的容器无论如何都是单应用程序容器。 -
这是一个选项,但很想知道是否有可能在不切换嵌入的情况下做到这一点。