我想在tomcat中进行热部署,但是失败了。我使用maven tomcat插件来部署。 当我调用“mvn tomcat:redeploy”时,战争成功上传到tomcat webapps文件夹。但它没有成功解压缩,因为我的原始webapplication文件夹未成功删除。在WEB-INF / lib下仍然存在一个oracle jdbc jar。当我尝试手动删除它时,它不能被删除事件。它告诉我,有一个进程正在使用它。我想jdbc连接没有被释放。
我该如何解决这个问题?感谢
杰夫张答案 0 :(得分:5)
你可以在tomcat的context.xml中更改antiJarLocking和antiResourceLocking属性,然后可以成功删除旧的war,这样你就可以重新部署你的app。
<Context antiJARLocking="true" antiResourceLocking="true">
答案 1 :(得分:1)
Web应用程序没有取消部署可能是由于webapp类加载器之外的引用持有webapp中的某些实例/类而导致Web应用程序没有被完全垃圾收集。然后,这将锁定webapp中的这些jar,防止webapp文件被删除。
这是您自己的网络应用吗?如果是这样,您应该尝试使用内存分析器在tomcat中对其进行分析 - 执行部署,使用和取消部署循环,并查看哪些引用保留了您的webapp的类/实例。
因为它是jdbc驱动程序,所以我首先查看数据源。例如,如果使用Spring配置数据源,请确保关闭数据源。 E.g。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
destroy-method="close"
确保在webapp终止时正确关闭数据源。