如何在不重新启动整个服务的情况下更新Tomcat Web应用程序?

我是Tomcat新手。 我们有一个开发机器,运行大约5个应用程序。 即使它是开发,在testing过程中,我们的客户也会使用它。

所以说我们需要在一个类文件上做一个小小的改动。 现在,我们必须closuresTomcat(影响其他四个应用程序),删除WAR文件(和Web应用程序目录),重新部署新的WAR文件并重新启动Tomcat

当然,这会让一些人感到不安,因为它会破坏所有应用程序的所有login会话。

有没有更好的方法来做到这一点? 我的意思是,有没有办法只重新加载CLASS ,而不是开发机器上的所有内容?

谢谢。

您是否尝试过使用Tomcat的pipe理器应用程序 ? 它可以让您取消部署战略文件与closuresTomcatclosures。

如果您不想使用Manager应用程序,也可以从webapps目录中删除war文件,Tomcat将在短时间内取消部署应用程序。 然后,您可以将战争文件复制回目录中,Tomcat将部署战争文件。

如果您在Windows上运行Tomcat,则可能需要将您的上下文configuration为不locking各种文件。

如果绝对不能有任何停机时间,那么可能要查看Tomcat 7的并行部署。您可以同时部署具有相同上下文path的Web应用程序的多个版本。 用于将请求匹配到上下文版本的规则如下:

  • 如果请求中没有会话信息,请使用最新版本。
  • 如果请求中存在会话信息,请检查每个版本的会话pipe理器是否有匹配的会话,如果find,则使用该版本。
  • 如果请求中存在会话信息,但没有find匹配的会话,请使用最新版本。

在apache tomcat的conf目录下,你可以findcontext.xml文件。 在该编辑标签中,作为< Context reloadable =“true” >。 这应该解决这个问题,你不需要重新启动服务器

有多种简单的方法。

  1. 只需触摸任何Web应用程序的web.xml。

     touch /usr/share/tomcat/webapps/<WEBAPP-NAME>/WEB-INF/web.xml 

您也可以在WEB-INF / lib中更新特定的jar文件,然后触摸web.xml,而不是构build整个war文件并再次部署。

  1. 删除webapps / YOUR_WEB_APP目录,Tomcat将在5秒内开始部署war(假设war文件仍然存在于webapps文件夹中)。

  2. 一般用新版本覆盖war文件被tomcat自动重新部署。 如果没有,可以按照上面的解释触摸web.xml。

  3. 将已经爆炸的“目录” 复制到您的webapps文件夹中