通常,当我在Tomcat的webapps文件夹中放入更新的war文件时,相应的webapp会自动更新。
但有时,当我放置一个更新的war文件时,会发生一件奇怪的事情:大部分webapp的文件夹被删除,除了一些随机的文件收集。当然,在这种情况下,webapp不再有效。为了使它工作,我必须停止Tomcat,完全删除该webapp的文件夹,然后重新启动Tomcat。
在将war文件放入webapps之前,我尝试从Tomcat管理器停止webapp - 它没有帮助。
我尝试将“autodeploy”和/或“unpackwars”更改为false,但是当我放入新的warfile时,webapp根本没有更新。
我也尝试使用Jenkins的部署插件,但同样的问题也发生了。
系统规范:Windows 2003上的Tomcat 7。
答案 0 :(得分:2)
根据Tomcat 7配置指南:http://tomcat.apache.org/tomcat-7.0-doc/config/host.html#Automatic%20Application%20Deployment
“更新 WAR文件将触发取消部署应用程序 删除任何关联的扩展目录,上下文文件和 工作目录。任何当前的用户会话都不会被保留... 应用程序将在下次自动部署者检查时重新部署 为了改变。“
问题可能是,自动部署程序仍然没有完成删除扩展目录,而另一个线程开始重新部署它。
我的解决方法是删除旧的war文件,等到目录被删除,然后才放入新的war文件,因为:
“删除 WAR文件将触发取消部署应用程序 删除任何关联的扩展目录,上下文文件和 工作目录。任何当前的用户会话都不会被保留。“
答案 1 :(得分:0)
免责声明: 1.是的,我知道这是一个老问题。 2.完全未经测试。
我还没有尝试过,所以这完全未经“书”测试。来了。
Tomcat7 documentation(存档的here)至少提到需要额外的步骤才能在Windows上进行热部署。即...
在Windows上,假定具有反锁定功能(请参阅 启用了上下文配置),否则无法 删除正在运行的Web应用程序的资源。
...并且适当的配置开关似乎叫antiResourceLocking
,显然是...
允许在可能发生文件锁定的平台或配置上进行完整的Web应用程序热部署和取消部署
我不确定,但是所有这些确实听起来有点像“如果您尝试在没有antiResourceLocking = true的Windows上进行热部署,则会发生未定义的行为” 。听起来很糟糕。