2009-02-24 126 views
9

我想收集一些关于将Web应用程序部署到正在运行的Tomcat的最佳实践。不久前,我不得不描述我们的Web应用程序的部署过程,并且这个过程显得相当混乱。我们有一个WAR文件(foo.war)中的应用程序正确配置,不需要额外的配置。在这种情况下,部署过程相当简单:将Web应用程序部署到正在运行的Tomcat

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

要取消部署应用程序:

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

现在我想重写我正在运行的应用程序中的一些上下文参数。读了docs,所有我需要做的:

  1. 创建一个名为foo.xml
  2. 将文件复制到$ CATALINA_BASE/conf目录/ [引擎]/[主机名] /目录下的context.xml文件。

不幸的是,这没有奏效:应用程序不会重新启动。从经验上讲,我们发现唯一的解决方案是将war文件部署到$ CATALINA_HOME/webapps之外的位置。 此外,应该在web.xml中指定WAR文件中可配置上下文参数的缺省值,因为WAR文件中的context.xml在外面有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> 

要确保,如果你想在“NEWVALUE”覆盖在WAR的web.xml中指定的值,以指定倍率= false为参数。这对我们来说并不明显。

因此,到aplication部署到运行Tomcat:

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

要申请新的环境参数:

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

要取消部署应用程序:

  • 从$ CATALINA_BASE/conf目录/ [引擎]/[主机名] /目录

请注意,移除foo的取出foo.xml。战争也会奏效,但也会删除foo.xml。


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

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

回答

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]

有蚂蚁的任务,可以帮助您与这些。

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

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

1

问题(1)中,Tomcat非常适合将servlet部署到正在运行的服务器。有可能会担心w.r.t.安全或可能D.O.S.或配置的原因,为什么你会有单独的服务器实例。

您可以灵活地做到这一点,但部署到已经运行的服务器通常更方便。这是servlet体系结构中的内置功能。 :)

对于(2),您可以自行决定将WAR放在哪里。这听起来像你已经配置了一个非标准(非默认我应该说)的方式。检查您的server.xml文件以获取服务器实例中的设置。检查unpackWARsautoDeploy等属性。对于(3)和(4),再加上你的(1,2)问题,最好在其部署模型中参考你的Tomcat版本的Tomcat文档,这可能是一个不错的主意。您应该可以使用相同的文档来确定您的服务器是如何配置的。

请参阅Tomcat手册中的Tomcat Web Application Deployment,调整您的Tomcat版本。

相关问题