在Spring 2.5中注册关闭钩子

我有一个spring应用程序,它不会在关闭时调用bean destroy方法。 我已经看到对此的引用是由于beanRefFactory中的实例化,并且可以通过在应用程序上下文中手动调用registerShutdownHook()来避免这种情况。这种方法似乎已经从版本2.0-2.5之间的spring消失了。

有人能指出我现在的方向吗?

谢谢。

此方法仍可在ConfigurableApplicationContext ,并由AbstractApplicationContext实现。

所以你可能会这样做

 ApplicationContext ctx = ...; if (ctx instanceof ConfigurableApplicationContext) { ((ConfigurableApplicationContext)ctx).registerShutdownHook(); } 

或者,您可以在关闭应用程序或使用自己的关闭挂钩时自己调用((ConfigurableApplicationContext)ctx).close()

 Runtime.getRuntime().addShutdownHook(new Thread() { public void run(){ if (ctx instanceof ConfigurableApplicationContext) { ((ConfigurableApplicationContext)ctx).close(); } } }); 

这么多upvotes,但第二个声明是完全错误的,java中的system.exit会在到达你的shutdownhook之前终止spring,正确的方法是这四种方式

1 InitializingBean和DisposableBean回调接口2其他用于特定行为的Aware接口3 bean配置文件4中的自定义init()和destroy()方法@PostConstruct和@PreDestroy注释

点击这里 !