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

cbm*_*eks 90 deployment tomcat war

我是新手Tomcat.我们有一台开发机器,运行大约5个应用程序.即使它是开发人员,我们的客户在测试期间也会使用它.

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

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

有一个更好的方法吗?我的意思是,有没有办法只重新加载改变的CLASS而不是dev机器上的所有内容?

谢谢.

Ste*_*e K 57

您是否尝试过使用Tomcat的Manager应用程序?它允许您在不关闭Tomcat的情况下取消部署/部署war文件.

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

如果在Windows上运行Tomcat,则可能需要将Context 配置为不锁定各种文件.

如果绝对无法停机,您可能需要查看Tomcat 7的并行部署 您可以同时使用相同的上下文路径部署多个版本的Web应用程序.用于将请求与上下文版本匹配的规则如下:

  • 如果请求中不存在会话信息,请使用最新版本.
  • 如果请求中存在会话信息,请检查每个版本的会话管理器以查找匹配的会话,如果找到,则使用该版本.
  • 如果请求中存在会话信息但未找到匹配的会话,请使用最新版本.

  • 在不重新启动的情况下重新部署时,您必须小心内存泄漏 - 通常类加载器会泄漏引用,您需要重新启动整个Tomcat进程才能从旧版本的应用程序中释放内存.LiveRebel(在另一个答案中提到)可以为您自动化所有这些. (5认同)
  • 您无需删除要重新部署的战争.只需复制旧战争并等待几秒钟. (3认同)

小智 27

有多种简单的方法.

  1. 只需触摸任何webapp的web.xml即可.

    touch /usr/share/tomcat/webapps/<WEBAPP-NAME>/WEB-INF/web.xml
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  2. 通常用新版本覆盖war文件会被tomcat自动重新部署.如果没有,您可以按照上面的说明触摸web.xml.

  3. 已经展开的"目录" 复制到您的webapps文件夹

  • 看看它的工作原理可以在`$ CATALINA_BASE/conf/context.xml`中读到.监视WEB-INF/web.xml的更改.其他资源可以根据需要轻松列在那里. (2认同)

ska*_*kal 21

在apache tomcat的conf目录中,您可以找到context.xml文件.在该编辑标记中为< Context reloadable ="true" >.这应该可以解决问题,您无需重启服务器