java - Windows 中的 Tomcat WAR 文件部署失败
问题描述
我有一个在 Windows 环境中的 tomcat 容器中运行的应用程序。当我必须更新应用程序时,tomcat windows 服务停止,新的 ROOT.war 文件被复制到 webapps 文件夹中并重新启动 tomcat 服务。
有时会发生 ROOT.war 提取失败,提取的 ROOT 文件夹只有几个子文件夹和几个文件。显然,以下应用程序启动失败。为了解决这个问题,我必须停止tomcat,删除ROOT文件夹并再次运行,让tomcat从头重新提取ROOT.war。
我不明白为什么有时会发生,有时不会。但是,我无法创建自动更新。这太冒险了。
你知道为什么会发生吗?
解决方案
不释放资源。因此,当您尝试更新现有的 war 文件时,tomcat 无法在部署/重新部署之前删除旧文件。
要解决此问题,请确保:
- 该应用程序未在 Web 浏览器上打开/运行。
- 单击更新时,您不会陷入调试模式。
- 所有流程/请求都在重新部署之前完成。
- 所有文件/流都在代码中关闭。
- 当所有其他方法都失败时,您可能想要停止应用程序。然后更新。有一些方法可以使用命令行、批处理文件等来停止 tomcat 上的应用程序。然后您可以自动执行该过程。
如果您想要一种更可靠的方法来执行此操作,您可以使用 jrebel 或相同的免费版本。还有其他方法可以更新代码。基本上,独立的 tomcat 不比开发服务器更有价值。
推荐阅读
- sql - 具有相同值的Sql查询合并列
- c# - 将 asp.net 发布到 Azure 时出现问题。数据库错误
- algorithmic-trading - 我在 Trading Technologies .NET SDK 中使用什么类/方法来表明我想在服务器端模式下运行?
- python - Pulp Python 中的 For 循环
- xcode - 无法读取序列化的诊断文件:无效文件:无效的诊断签名
- python - 如何在 s3 中合并 lambda 的输出结果
- python-unittest - python unittest错误并使用unittest.mock中的补丁
- python - 根据其他列的非 NA 值折叠 Pandas 列的值
- python - pytesseract image_to_pdf_or_hocr 输出pdf和文本
- api - 端点设计的 RESTful API 最佳实践