我想在Tomcat中进行热部署,但失败了。我使用Maven Tomcat插件进行部署。当我调用“mvn tomcat:redeploy”时,WAR文件成功上传到Tomcat的webapps文件夹。但是它没有成功解压缩,因为我的原始Web应用程序文件夹没有被成功删除。在WEB-INF / lib下仍然存在一个Oracle JDBC jar。即使我尝试手动删除它,它也无法被删除。它告诉我有一个进程正在使用它。我猜测JDBC连接没有释放。
我该如何解决这个问题?谢谢
Jeff Zhang
我该如何解决这个问题?谢谢
Jeff Zhang
您可以在Tomcat的context.xml中更改antiJarLocking和antiResourceLocking属性,然后成功删除旧的war包,这样您就可以重新部署您的应用程序了。
<Context antiJARLocking="true" antiResourceLocking="true">
Web应用程序未卸载可能是由于Web应用程序未完全垃圾回收,因为Web应用程序类加载器之外的引用保留了Web应用程序中的某些实例/类。这将锁定Web应用程序中的那些JAR文件,从而防止删除Web应用程序文件。
这是您自己的Web应用程序吗?如果是,请尝试在Tomcat中使用内存分析器对其进行分析-部署、使用和卸载周期,并查看哪些引用保留了您的Web应用程序的类/实例。
由于它是JDBC驱动程序,我建议首先查看数据源。例如,如果您正在使用Spring配置数据源,请确保关闭数据源。例如:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
destroy-method="close"
确保在 Web 应用程序终止时正确关闭数据源。