如何关闭ClassPathXmlApplicationContext

时间:2015-03-11 17:35:05

标签: java spring

我有这段代码......

public static void main(String[] args)
{
 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}

的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://cxf.apache.org/jaxws
        http://cxf.apache.org/schemas/jaxws.xsd
        http://cxf.apache.org/jaxrs
        http://cxf.apache.org/schemas/jaxrs.xsd">    
</beans>

代码退出,但JVM永远不会停止。

任何想法为什么它不会停止?

我还尝试了以下新的Main方法,但它一直在运行。

public static void main(String [] args)     {      ApplicationContext context = new ClassPathXmlApplicationContext(&#34; applicationContext.xml&#34;);     ((ConfigurableApplicationContext)上下文).registerShutdownHook();     ((ConfigurableApplicationContext)上下文).stop();     System.out.println(&#34;现在退出......&#34;);     }

如果我暂停JVM,它会显示4个线程。

使用TimerThread.run()

1

3使用ScheduledThreadPoolExecutor.take()

1 个答案:

答案 0 :(得分:1)

ConfigurableApplicationContext接口(ClassPathXmlApplicationContext实现)具有close方法,您需要调用该方法才能使JVM正常关闭。

可以找到更多信息here.