Tomcat热部署失败

Tomcat热部署失败,tomcat,deployment,maven,hotdeploy,Tomcat,Deployment,Maven,Hotdeploy,我想在tomcat中进行热部署,但失败了。我使用maven tomcat插件进行部署。 当我调用“mvn tomcat:redeploy”时,war被成功上传到tomcat webapps文件夹。但是它没有成功解包,因为my original webapplication文件夹没有成功删除。WEB-INF/lib下仍然存在一个oracle jdbc jar。当我尝试手动删除它时,它不能被删除事件。它告诉我有一个过程在使用它。我想jdbc连接还没有发布 我怎样才能解决这个问题?谢谢 Jeff Zh

我想在tomcat中进行热部署,但失败了。我使用maven tomcat插件进行部署。 当我调用“mvn tomcat:redeploy”时,war被成功上传到tomcat webapps文件夹。但是它没有成功解包,因为my original webapplication文件夹没有成功删除。WEB-INF/lib下仍然存在一个oracle jdbc jar。当我尝试手动删除它时,它不能被删除事件。它告诉我有一个过程在使用它。我想jdbc连接还没有发布

我怎样才能解决这个问题?谢谢


Jeff Zhang

由于webapp类加载器外部的引用保留了webapp中的某些实例/类,导致webapp未完全垃圾收集,可能会导致webapp未取消部署。这将锁定webapp中的jar,防止webapp文件被删除

这是你自己的网络应用吗?如果是这样,您应该尝试使用内存分析器在tomcat中对其进行评测—执行部署、使用和取消部署循环,并查看哪些引用保留了您的webapp的类/实例

因为它是jdbc驱动程序,所以我首先看一下数据源。例如,如果使用Spring配置数据源,请确保数据源已关闭。例如

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">


destroy method=“close”
可确保webapp终止时数据源正确关闭。

您可以更改tomcat的context.xml中的antiJarLocking和antiResourceLocking属性,然后可以成功删除旧war,以便重新部署您的应用程序

<Context antiJARLocking="true" antiResourceLocking="true">    

这是我的解决方案!