【发布时间】:2017-09-01 14:55:04
【问题描述】:
我有一个在 tomcat 9 上部署的 webapp。作为部署的一部分,我们只是将战争放到 webapps 目录,然后 tomcat 重新部署战争。但是有时候我们会在日志中看到一些错误,基本上是一些spring bean的destroy方法没有被调用:
2017 年 8 月 31 日 21:41:35.292 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy 取消部署上下文 [/globalsearch] 信息:org.springframework.web.context.support.XmlWebApplicationContext - 关闭命名空间“appServlet-servlet”的 WebApplicationContext:启动日期 [2017 年 8 月 30 日星期三 22:34:34 AEST];父级:根 WebApplicationContext 信息:org.springframework.web.context.support.XmlWebApplicationContext - 关闭根 WebApplicationContext:启动日期 [2017 年 8 月 30 日星期三 22:34:26 AEST];上下文层次的根 警告:org.springframework.beans.factory.support.DisposableBeanAdapter - 在名为“GlobalSearchEventLoadMessageProcessing”的bean上调用销毁方法“cleanUp”失败:java.lang.IllegalStateException:java.io.FileNotFoundException:/opt/tomcat/9.0.0 .M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar(没有这样的文件或目录) 警告:org.springframework.beans.factory.support.DisposableBeanAdapter - 在名为“globalSearchMessageSender”的bean上调用销毁方法“cleanUp”失败:java.lang.IllegalStateException:java.io.FileNotFoundException:/opt/tomcat/9.0.0 .M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar(没有这样的文件或目录) 警告:org.springframework.beans.factory.support.DisposableBeanAdapter - 在名为“globalSearchEmbeddedJMS”的bean上调用销毁方法“stopServer”失败:java.lang.IllegalStateException:java.io.FileNotFoundException:/opt/tomcat/9.0.0 .M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar(没有这样的文件或目录) 警告:org.springframework.beans.factory.support.DisposableBeanAdapter - 在名为“connectionFactory”的bean上调用销毁方法“close”失败:java.lang.IllegalStateException:java.io.FileNotFoundException:/opt/tomcat/9.0.0 .M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar(没有这样的文件或目录)spring bean 正在创建一个线程,该线程正在销毁方法中被销毁,并且由于错误,即使重新部署后该线程仍然处于活动状态。
我正在为 spring 配置使用 xml 文件:
<bean id="GlobalSearchEventLoadMessageProcessing"
class="xxx.GlobalSearchEventLoadMessageProcessing"
init-method="initialize" destroy-method="cleanUp">
</bean>
如何保证destroy方法被调用和执行完。 我正在使用 Java 8、Tomcat 9 和 Spring 4.1.9
PS:我无法停止和启动服务器以进行部署过程。
【问题讨论】: