将Web应用程序部署到正在运行的Tomcat

new*_*ver 9 deployment configuration tomcat servlets

我想收集一些关于将Web应用程序部署到正在运行的Tomcat的最佳实践.不久前,我不得不描述我们的网络应用程序的部署过程,这个过程显得比较混乱.

比如,我们在WAR文件(foo.war)中有一个应用程序正确配置,不需要额外的配置.在这种情况下,部署过程相当简单:

  • 将foo.war文件复制到$ CATALINA_HOME/webapps目录.如果应用程序正确启动,应用程序将自动部署到$ CATALINA_HOME/webapps/foo目录.

要取消部署应用程序:

  • 从$ CATALINA_HOME/webapps中删除foo.war文件.如果应用程序正确卸载,它将被卸载并且$ CATALINA_HOME/webapps/foo将被删除.

现在我想在我正在运行的应用程序中覆盖一些上下文参数.阅读完文档后,我需要做的就是:

  1. 创建名为foo.xml的context.xml文件
  2. 将文件复制到$ CATALINA_BASE/conf/[enginename]/[hostname] /目录.

不幸的是,这不起作用:应用程序不会重新启动.根据经验,我们发现唯一可行的解​​决方案是将war文件部署到$ CATALINA_HOME/webapps之外的位置.此外,应该在web.xml中指定WAR文件中可配置上下文参数的默认值,因为当外部有context.xml时,不会读取WAR文件中的context.xml.

这是foo.xml的一个简单示例:

<?xml version='1.0' encoding='utf-8'?>                           
<Context docBase="/path-to-deployment-directory/foo.war">
    <Parameter name="myparam" value="newvalue" override="false"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

如果希望'newvalue'覆盖WAR的web.xml中指定的值,请确保为参数指定override = false.这对我们来说并不明显.

因此,要将应用程序部署到正在运行的Tomcat:

  1. 创建名为foo.xml的context.xml文件
  2. 将文件复制到$ CATALINA_BASE/conf/[enginename]/[hostname] /目录.
  3. 将foo.war复制到foo.xml的docBase中指定的位置; 应用程序将自动部署.

要应用新的上下文参数:

  • 将参数值添加到foo.xml并保存文件; 应用程序将自动重新部署.

要取消部署应用程序:

  • 从$ CATALINA_BASE/conf/[enginename]/[hostname] /目录中删除foo.xml

请注意,删除foo.war也可以,但也会删除foo.xml.


到现在为止,我有以下问题:

  1. 在不停止tomcat的情况下部署Web应用程序是否是最佳实践?我听说有人认为永远不需要部署到正在运行的tomcat,因为人们在一个单独的tomcat中运行每个应用程序.
  2. 将WAR文件复制到$ CATALINA_HOME/webapps是一个好主意,还是最好将它们保存在一个单独的位置?
  3. 如何配置部署到$ CATALINA_HOME/webapps的应用程序
  4. 为什么catalina.out中没有用于部署应用程序的INFO行,还有一个用于取消部署?它是可配置的吗?

kgi*_*kis 0

一种解决方案是使用管理器应用程序。如果您认为使用它是安全的,那么您可以轻松部署、启动、停止和取消部署应用程序:

http://localhost:8080/manager/deploy?path=[context_path] http://localhost:8080/manager/start?path=[context_path] http://localhost:8080/manager/stop?path=[context_path ] http://localhost:8080/manager/undeploy?path=[context_path]

有一些 ant 任务可以帮助您完成这些任务。

我猜测,但不确定,停止和启动应用程序将使其重新读取 context.xml。

关于你的第二个问题,我认为出于维护原因,将 war 文件保留在 webapps 目录中会更好。