如何在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