【问题标题】: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 终止时正确关闭数据源。

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 2013-03-23
      • 2021-05-22
      • 1970-01-01
      相关资源
      最近更新 更多