【问题标题】:Tomcat hot deployment failsTomcat热部署失败
【发布时间】:2011-04-07 08:39:13
【问题描述】:
我想在 tomcat 中进行热部署,但失败了。我使用 maven tomcat 插件来部署。
当我调用“mvn tomcat:redeploy”时,战争成功上传到 tomcat webapps 文件夹。但是没有解包成功,因为我原来的webapplication文件夹没有成功删除。在 WEB-INF/lib 下仍然存在一个 oracle jdbc jar。当我尝试手动删除它时,它不能是删除事件。它告诉我有一个进程正在使用它。我猜jdbc连接没有释放。
我该如何解决这个问题?谢谢
张杰
【问题讨论】:
标签:
tomcat
deployment
maven
hotdeploy
【解决方案1】:
你可以在tomcat的context.xml中修改antiJarLocking和antiResourceLocking属性,这样旧的war就可以成功移除,你就可以重新部署你的应用了。
<Context antiJARLocking="true" antiResourceLocking="true">
【解决方案2】:
Web 应用未取消部署可能是由于 Web 应用类加载器之外的引用保留了 Web 应用中的某些实例/类,导致该 Web 应用没有被完全垃圾收集。然后,这将锁定 webapp 中的这些 jar,防止 webapp 文件被删除。
这是您自己的网络应用吗?如果是这样,您应该尝试使用内存分析器在 tomcat 中对其进行分析 - 执行部署、使用和取消部署周期,并查看哪些引用保留了您的 webapp 的类/实例。
既然是 jdbc 驱动,我先看看数据源。例如,如果您使用 Spring 配置数据源,请确保数据源已关闭。例如
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
destroy-method="close" 可确保在 webapp 终止时正确关闭数据源。