3

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

我怎么解决这个问题 ?谢谢

张杰夫

4

2 回答 2

5

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

<Context antiJARLocking="true" antiResourceLocking="true">    
于 2012-07-13T13:30:27.253 回答
1

未取消部署的 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 终止时正确关闭数据源。

于 2011-04-07T08:45:03.507 回答