Deployment 为什么tomcat在重新部署时替换context.xml?
文档说明如果您在此处有上下文文件:Deployment 为什么tomcat在重新部署时替换context.xml?,deployment,tomcat,tomcat6,Deployment,Tomcat,Tomcat6,文档说明如果您在此处有上下文文件: $CATALINA_HOME/conf/Catalina/localhost/myapp.xml mywebapp.war/META-INF/context.xml 此处不会被上下文文件替换: $CATALINA_HOME/conf/Catalina/localhost/myapp.xml mywebapp.war/META-INF/context.xml 这里写着: 仅当$CATALINA_BASE/conf/[engineame]/[hostnam
$CATALINA_HOME/conf/Catalina/localhost/myapp.xml
mywebapp.war/META-INF/context.xml
此处不会被上下文文件替换:
$CATALINA_HOME/conf/Catalina/localhost/myapp.xml
mywebapp.war/META-INF/context.xml
这里写着:
仅当$CATALINA_BASE/conf/[engineame]/[hostname]/,在应用程序文件中的/META-INF/context.xml处的单个文件中不存在应用程序的上下文文件时
但每次我重新部署war时,它都会用/META-INF/context.xml替换这个myapp.xml
它为什么会这样做?我如何避免它
Thanx重新部署的取消部署部分将删除应用程序和关联的context.xml 如果您使用maven tomcat插件,如果您使用以下命令部署应用程序,则可以避免删除context.xml:
mvn tomcat:deploy-only -Dmaven.tomcat.update=true
更多信息请点击此处:
您也可以将deploy only with parameter mode用于部署context.xml。在tomcat7上,如果autoDeploy=false,文件将在取消部署时被删除。这是有文档记录的,不是一个bug(尽管它避免了服务器端固定配置的良好自动化部署) 我找到了一个解决问题的方法:
- 在webapp中创建包含以下内容的META-INF/context.xml文件
- 在服务器上,在Server.xml中创建第二个context“/config context”,并将所有服务器端配置参数放在那里
- 在应用程序上,使用context.getContext(“/config context”).getInitParameter(…)访问其中的配置
还可以通过添加诸如“/config context MYPATH”之类的上下文来添加每个上下文的配置。在应用程序中,您可以使用应用程序的上下文路径计算配置应用程序的上下文路径。简短回答: 只需将TOMCATHOME/conf/Catalina/localhost目录设置为只读,并继续阅读以了解更多详细信息:
- 对于快速部署模式(Eclipse动态web项目,直接使用Tomcat 在本地/非共享Tomcat服务器上,您只需定义JDBC数据源(或任何 其他“web资源”),使用 战争档案。在本地环境中轻松快速,但不适合登台、QA或 生产
- 对于构建部署模式(通常用于暂存、QA或prod),JDBC 数据源和其他“web资源”详细信息由 QA/生产团队,不再是开发团队。因此, 必须在Tomcat服务器中指定,而不是在WAR文件中指定 不再在这种情况下,请在文件中指定它们 TOMCATHOME/conf/Catalina/localhost/CONTEXT.xml(更改Catalina 通过引擎,本地主机通过主机,上下文通过您的上下文)。然而, Tomcat将在每次部署时删除此文件。为了防止这种情况 删除,只需将此目录设置为只读;在Linux中,您可以键入: 瞧!欢迎光临
- 出于历史原因,Tomcat允许您用四种方式定义web资源(JDBC数据源等) 如果您碰巧多次定义同一资源,则按非常特定的优先顺序在不同的位置(读取四个不同的文件)。名单上的名字 以上简短的回答现在更适合于各种用途,尽管你仍然可以 使用其他的(不……你可能不想)。我不会去的 在这里讨论其他的,除非有人要求
- 全局资源永远不会被删除
- 外部资源永远不会被删除
- 如果WAR或DIR已被修改,则仅删除XML文件 如果copyXML为true,而deployXML为true
如果有人能说出解决问题的“外部资源”是什么。重新部署意味着两个部分:取消部署和部署 取消部署将删除
conf/Catalina/yourhost/yourapp.xml
,因为
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="true"> <!-- means autoUndeploy too!!! -->
</Host>
更改autoDeploy=“false”
,Tomcat将不再有命令删除conf/Catalina/yourhost/yourapp.xml
有一个特性允许我们将这些步骤(取消部署/部署)作为一个单独的步骤(重新部署),而不删除
context.xml
。此功能可通过manager文本界面使用,但使用manager html界面时该选项不可用。您可能必须等到问题解决后再做。您可以使用本答案中所述的方法作为解决方法。标题中所述的一般问题包含在其中,目前仍然是一个悬而未决的问题
在不删除上下文的重新部署和在取消部署后部署(其中取消部署删除上下文)之间存在公认的区别。文档已过期,manager GUI仍然不支持重新部署。您是手动部署还是通过IDE插件部署?就个人而言,我不会在应用服务器上放置context.xml。我不知道,因为我很少能指望有机会