SpringDisposableBean不起作用
我正在我的一个bean中实现DisposableBean,以便在服务器关闭时得到通知。但是,从不调用destroy方法 我正在用Spring 3运行Tomcat 有什么建议吗?使用并覆盖SpringDisposableBean不起作用,spring,tomcat,Spring,Tomcat,我正在我的一个bean中实现DisposableBean,以便在服务器关闭时得到通知。但是,从不调用destroy方法 我正在用Spring 3运行Tomcat 有什么建议吗?使用并覆盖contextdestromed方法 不要忘记在web.xml中声明ContextLoaderListener,而不是使用ApplicationContext,使用AbstractApplicationContext。 然后注册相同的代码。如果您正在使用ApplicationContext,Spring不会为桌面
contextdestromed
方法
不要忘记在
web.xml
中声明ContextLoaderListener
,而不是使用ApplicationContext,使用AbstractApplicationContext。
然后注册相同的代码。如果您正在使用ApplicationContext,Spring不会为桌面应用程序调用DisposableBean
例:
AbstractApplicationContext appCxt=新类路径XMLApplicationContext(“spring.xml”);
appCxt.registerShutdownHook() 我尝试了这个选项
使用带有destroy()
方法的obj
对象,添加以下内容:
Runtime.getRuntime().addShutdownHook(新线程(obj::destroy))
如果它有效,你可能会考虑接受这个答案。谢谢。当然:)最后一件事,为什么春天不为我做呢?DisposableBean是否只在特殊情况下工作?我猜(不确定)当Tomcat宕机时,它只会终止所有线程,而Spring并没有侵入性地保持线程并执行优雅的关闭。我猜DisposableBean只在您完全控制BF生命周期的受控环境中工作。上下文监听器OTOH是Tomcat中的一个标准钩子,所以这是一个完全有效的解决方案。实际上,我尝试了你的解决方案。我可以很容易地获得根上下文,但我需要的是servlet/应用程序上下文。如何访问这些?您需要将Spring的
ContextLoaderListener
放在您需要上下文的webapp的web.xml中。或者,如果您所做的不是特定于Spring的,您可以只使用标准的ServletContextListener,-Spring的listener所做的不比这多。或者,在JNDI中绑定所有必要的对象(例如,在webapp启动时),并在必要时访问这些对象。