2017-09-01 140 views
0

我有一個正在部署在tomcat 9上的web應用程序。作爲部署的一部分,我們將戰爭放到webapps目錄,並且tomcat重新部署戰爭。但有時我們看到在日誌中的一些錯誤,基本上摧毀一些春天bean的方法,則不會調用:Spring bean在tomcat中重新部署應用程序時未被破壞

 
31-Aug-2017 21:41:35.292 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy Undeploying context [/globalsearch] 
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Closing WebApplicationContext for namespace 'appServlet-servlet': startup date [Wed Aug 30 22:34:34 AEST 2017]; parent: Root WebApplicationContext 
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Closing Root WebApplicationContext: startup date [Wed Aug 30 22:34:26 AEST 2017]; root of context hierarchy 
WARN : org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method 'cleanUp' failed on bean with name 'GlobalSearchEventLoadMessageProcessing': java.lang.IllegalStateException: java.io.FileNotFoundException: /opt/tomcat/9.0.0.M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar (No such file or directory) 
WARN : org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method 'cleanUp' failed on bean with name 'globalSearchMessageSender': java.lang.IllegalStateException: java.io.FileNotFoundException: /opt/tomcat/9.0.0.M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar (No such file or directory) 
WARN : org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method 'stopServer' failed on bean with name 'globalSearchEmbeddedJMS': java.lang.IllegalStateException: java.io.FileNotFoundException: /opt/tomcat/9.0.0.M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar (No such file or directory) 
WARN : org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method 'close' failed on bean with name 'connectionFactory': java.lang.IllegalStateException: java.io.FileNotFoundException: /opt/tomcat/9.0.0.M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar (No such file or directory) 

彈簧豆正在創造它被銷燬的銷燬方法,並因錯誤此主題線程即使重新部署後仍然處於活動狀態。

我使用的XML文件,Spring配置:

<bean id="GlobalSearchEventLoadMessageProcessing" 
    class="xxx.GlobalSearchEventLoadMessageProcessing" 
    init-method="initialize" destroy-method="cleanUp"> 
</bean> 

如何確保銷燬方法被調用,並完全執行。 我正在使用Java 8,Tomcat 9和Spring 4.1.9

PS:我無法停止並啓動部署過程的服務器。

回答

0

望着錯誤,該方法被調用:

WARN : org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method 'cleanUp' failed on bean with name 'GlobalSearchEventLoadMessageProcessing': java.lang.IllegalStateException: java.io.FileNotFoundException: /opt/tomcat/9.0.0.M19/webapps/globalsearch/WEB-INF/lib/commons-collections-3.2.1.jar (No such file or directory) 

但它失敗了,因爲很有可能由於競爭條件 - 你正在嘗試運行從jar文件,該文件已經從刪除了一些代碼集裝箱。你可以避免在你的cleanup方法中使用外部庫嗎?

+0

感謝您的回覆...實際上在清理方法Executor服務正在關閉和JMSContext正在關閉,這可能是內部使用這些第三方罐......我不認爲我可以避免這... 任何其他建議? – Vishal

+0

它可能與您正在使用的JMSContext有關,因爲我相信這是一個間接調用,Java/Tomcat不會「看到」不同線程中的依賴關係,並允許在代碼執行完成之前從內存中刪除JAR。您可以嘗試更改代碼以明確使用您的依賴關係。 – Zilvinas

相關問題