我们的项目使用 Cruise Control 构建和热部署 Web 应用程序到远程服务器(通过 FTP)以 .war 文件的形式运行 Tomcat。不幸的是,“热”部署似乎无法正常工作,导致我们重新启动 Tomcat 以响应每个部署。我们真的很想自动执行此操作,就像构建本身一样。是否有捷径可寻?
旁注:两台机器都运行 Windows(我认为是 XP 或服务器)。
旁注2:性能并不重要。这是一个集成框。
我们的项目使用 Cruise Control 构建和热部署 Web 应用程序到远程服务器(通过 FTP)以 .war 文件的形式运行 Tomcat。不幸的是,“热”部署似乎无法正常工作,导致我们重新启动 Tomcat 以响应每个部署。我们真的很想自动执行此操作,就像构建本身一样。是否有捷径可寻?
旁注:两台机器都运行 Windows(我认为是 XP 或服务器)。
旁注2:性能并不重要。这是一个集成框。
如果您定期安排构建,则可以像这样轻松地将某些内容放入 cron
crontab -e
然后在凌晨 1:30 停止 tomcat
30 1 * * * ./path_to_tamcat/bin/catalina.sh stop
然后 2 分钟后再次启动
32 1 * * * ./path_to_tamcat/bin/catalina.sh start
当然这对于不定期部署来说不是最好的,但是您可以轻松地进行定期部署并计划重启。
如果您查看 bin 目录中的 tomcat 启动和关闭 .bat(或 .sh)脚本,您会看到它们实际上运行了一个 java 进程来启动 tomcat 或者在关闭的情况下,连接到 tomcats 关闭端口 - 参见conf 目录中的 server.xml。您可以配置您的 build ant 任务以与脚本相同的方式调用 tomcat jar。
tomcat 是否注册为 Windows 服务?
如果是这样,只需使用 netstart 和 netstop 编写一个 .bat 脚本,并将调用作为部署过程的最后一步。
这听起来有点像您正在使用小型 Tomcat 部署管理器。我基本上没有这方面的经验,你知道的。也就是说,在我工作的地方,我们使用两种设置。
在 server.xml 文件中,上下文具有reloadable="true"属性。
我们所要做的就是将 WAR 文件放在正确的位置,然后 Tomcat 将其解压缩并重新加载,没问题。
现在当我查看它时,官方配置参考说:
“此功能在应用程序开发过程中非常有用,但它需要大量运行时开销,不建议在已部署的生产应用程序中使用。”
就像我说的,我们从来没有遇到过问题。我们的系统处理大量请求,我们似乎没有问题。不过,我们从未对这两种配置进行过基准测试。
你可能想试一试。至少你会知道这样做是否足够高兴重新加载东西。您也可以检查性能,看看它是否对您有问题。
我应该注意,每隔一段时间,事情就会不正常,无论如何我们都必须重新启动 Tomcat,但这种情况相对较少。
如果这可行,您需要做的就是在正确的位置使用脚本复制 WAR 并监控以确保一切正常。在足够的部署之后,Tomcat 将用完 permgen 空间,因此您必须意识到您可能需要手动重新启动 Tomcat。
其他随机猜测:
What version of tomcat are you using? What exactly happens to make it appear as if a "hot" deploy doesn't work?
可重新加载=“真”
不启用war-files的重新部署(这将自动工作),它可以监视WEB-INF/classes和WEB-INF/lib中文件的变化,这可能不是你想要的。
大多数情况下,在 Tomcat 中重新部署 war 文件时冻结,我能够将其追溯到类加载器泄漏,请参阅Classloader leaks: the dreaded "java.lang.OutOfMemoryError: PermGen space" 异常
您没有详细说明为什么您的热部署“无法正常工作”,但如果它实际上是由/WEB-INF/lib
被锁定的资源引起的(这不是不常见的原因;您经常mail.jar
在 JavaMail API 中看到这一点) , 然后只需将Context
'antiResourceLocking
属性设置为true
. 这是一个示例 webapp 的/META-INF/context.xml
外观:
<Context antiResourceLocking="true">
<!-- Your stuff here. -->
</Context>
在启动时启动 tomcat 的一种方法是使用 cron 使用 @reboot 属性运行它:
打开一个终端并输入:
sudo crontab -e
在文件末尾输入命令:
@reboot /`PATH_TO_WHERE_TOMCAT_INSTALLED`/bin/startup.sh
保存文件并退出。
上述命令将在每次计算机启动时运行一次。