如何关闭Spring ApplicationContext?

Avn*_*evy 78 java spring

我的应用程序完成后,我想关闭spring上下文.
相关代码有ApplicationContext参考,但我找不到close方法.

Tom*_*icz 138

垂头丧气你ApplicationContextConfigurableApplicationContext定义close()的方法:

((ConfigurableApplicationContext)appCtx).close();
Run Code Online (Sandbox Code Playgroud)

  • 你也可以转换为`AbstractApplicationContext` (12认同)
  • 现在还有一个`AutoCloseable`实现,这意味着现在可以使用try-with-resources,只要你将上下文存储在一个可见的'AutoCloseable`接口的变量中,即`try(ConfigurableApplicationContext context = new) ....){/*你的代码在这里*/} //当你离开try块时关闭上下文 (5认同)
  • @eeezyy - 由于`AbstractApplicationContext`是一个类而且`ConfigurableApplicationContext`是由该类实现的接口,因此在大多数情况下使用后者可能更好. (3认同)
  • 由于`ConfigurableApplicationContext`现在扩展了`Closable`(不知道这个更改是在哪个版本中进行的,但是4.2.x的文档显示它而3.0.x没有),更短的版本是`((Closable)context ).close();`. (3认同)

dog*_*ane 35

您需要使用JVM注册一个关闭钩子,如下所示:

((AbstractApplicationContext)appCtx).registerShutdownHook();
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:Spring手册:3.6.1.6在非Web应用程序中正常关闭Spring IoC容器


小智 11

如果您初始化下面的上下文

ApplicationContext context = new ClassPathXmlApplicationContext(beansXML); 
Run Code Online (Sandbox Code Playgroud)

清洁这样的背景

((ClassPathXmlApplicationContext) context).close();
Run Code Online (Sandbox Code Playgroud)


Chi*_*rag 11

如果Java SE 7及更高版本不关闭,请使用try-with-resources确保在语句结束时关闭每个资源.

try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"classpath*:META-INF/spring/*.xml" }))
{
     //write your code
}
Run Code Online (Sandbox Code Playgroud)