如何在Spring中正确关闭ApplicationContext?

我正在为获得Spring Core认证而学习,对于在提供的学习资料中发现的这个问题,我有些痴迷:

关闭应用程序上下文的首选方法是什么?

我知道如果我有这样的事情:

ConfigurableApplicationContext context = …

// Destroy the application

context.close();

通过在 方法,可以关闭ApplicationContext并销毁应用程序。 *

但是我认为这不是我必须做的最好方法。

阅读官方文档后,我发现我也可以执行以下操作:

context.registerShutdownHook();

因此JVM将在JVM退出之前触发Spring的关闭阶段。因此,在JVM退出时,将执行Spring的关闭阶段。

在文档上,我可以读到:通常无法调用,context.close()因为许多应用程序(Web应用程序)会无限期运行,但是最后一个声明到底是什么意思?为什么Web应用程序无限期运行?

所以我的问题是:

  • 我可以使用第二种方法关闭Web上的应用程序上下文吗?
  • 是喜欢尊重context.close()吗?

特纳克斯

回答:

如您所知,这ContextLoaderListener是负责初始化和销毁​​ApplicationContext的程序,当您关闭服务器时,将contextDestroyed调用ContextLoaderListener的方法。

  public void contextDestroyed(ServletContextEvent event){

closeWebApplicationContext(event.getServletContext());

ContextCleanupListener.cleanupAttributes(event.getServletContext());

}

这样closeWebApplicationContext,他们实际上close像这样在ApplicationContext上调用方法

  if ((this.context instanceof ConfigurableWebApplicationContext)) {

((ConfigurableWebApplicationContext)this.context).close();

}

这直接来自spring-

web-4.1.5.jar。从这里可以明显看出,它们用于close破坏Web应用程序中的ApplicationContext。

但是registerShutdownHook用于显式关闭非Web应用程序(例如独立的桌面应用程序)中的IoC容器,特别是当您从ClassPathXmlApplicationContext(或)FileSystemXmlApplicationContext(或其他类型)手动创建ApplicationContext时。

这样做是为了释放Spring应用程序使用的所有资源,并在Spring bean上调用destroy方法(如果有)。

以上是 如何在Spring中正确关闭ApplicationContext? 的全部内容, 来源链接: utcz.com/qa/435147.html

回到顶部