【问题标题】:Spring - complete shutdown of web applicationSpring - 完全关闭 Web 应用程序
【发布时间】: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 容器是一种选择吗?听起来您的容器无论如何都是单应用程序容器。
  • 这是一个选项,但很想知道是否有可能在不切换嵌入的情况下做到这一点。

标签: java spring


【解决方案1】:

请看看这些问题。它们与您的在同一行: How to manage Tomcat via Java, Start / stop a web application from itself?

正如@chrylis 建议的那样,我认为关闭服务器(如果它不是在嵌入式模式下运行)的最简单方法是使用运行时类。

【讨论】: