tomcat为什么喜欢删除我的context.xml文件?


24

我正在开发一个基于Web的Java应用程序,(显然)必须在开发过程中在本地运行它。我已经找到了Tomcat文档,并在其中找到了合适的context.xml文件,/etc/tomcat6/Catalina/localhost/但是每隔一段时间,Tomcat都会决定删除它!这意味着我必须放回去并重新启动Tomcat。

为什么这样做呢?我已经搜索了有关它的Tomcat文档,但没有一个更明智。

(哦,是的:它实际上没有被调用,context.xml但这owners.xml是此应用程序的HTTP路径前缀。)

更新资料

我现在看到Tomcat在运行时删除了文件。我想我需要提交一个错误...


有这个问题。似乎当您更换战争时,它会导致应用程序取消部署,从而导致上下文文件删除。我没有工作,但周围很想有一个比重新加载更方便=假stackoverflow.com/questions/4032773/...
artemb

Answers:


18

快速摘要:在几种情况下(例如更改war文件,删除webapp或将其替换为新内容),tomcat将取消部署上下文,包括删除上下文文件。

详细信息:tomcat是否执行autoDeployment(意味着检查.xml描述符中的更改以及检查webapp目录中的更改)取决于:

  1. 位于$ CATALINA_HOME / conf / server.xml部分的server.xml:

    <主机名=“ localhost” appBase =“ webapps” unpackWARs =“ true” autoDeploy =“ true” xmlValidation =“ false” xmlNamespaceAware =“ false”>

  2. 您还可以在上下文文件中设置此属性,以重载该值

autoDeploy = true的情况下引用文档可能会导致删除上下文文件:

  • 删除WAR文件将导致应用程序取消部署,同时删除所有关联的扩展目录,上下文文件和工作目录。
  • 删除目录将触发应用程序取消部署,同时删除所有关联的上下文文件和工作目录。
  • 更新WAR文件将删除所有关联的扩展目录,上下文文件和工作目录,从而导致应用程序取消部署。
  • 更新目录(而不是目录内容)将删除所有关联的上下文文件和工作目录,从而导致应用程序取消部署。

详尽的详细信息http : //tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment


这不是一个完整的答案-见serverfault.com/faq#deletion
珍妮d说恢复莫妮卡

:)请帮助自己(似乎语法突出显示的工作原理与stackoverflow中略有不同,后者之前删除了部分答案)
Jan Zyka 2013年

问题是,如果仅添加链接,则链接的目标可能会消失,从而使答案无用。这就是为什么serverfault.com鼓励您发布实际答案而不是仅发布链接。当我发表评论时,其余文字不可见。我仍然建议您实际发布更完整的回复,而不是链接的简短摘要。
珍妮D说恢复莫妮卡

1
那根本不是真的。原始答案包含(现在仍然如此)您可以在链接下找到的内容的简短摘要。没有链接,答案仍然很有意义,并且与链接一起您可以找到详细信息。
2013年

但是我不打算冒犯他人,因此,如果听起来像那样,我很抱歉:)我对这个网络不怎么感兴趣,只是在解决相同的问题并想分享。
2013年

5

如果不想使用autoDeploy功能,例如在生产环境中,可以考虑在conf / Catalina / localhost上下文文件中使用以下属性:

  • autoDeploy =“ false”
  • 和deployXML =“ false”

autoDeploy =“ false”可能无法单独使用,因为应用程序context.xml(在META-INF中)可以覆盖autoDeploy的server.xml设置。

  • 该应用程序的META-INF / context.xml将在具有autoDeploy的开发环境中使用
  • 生产中的conf / Catalina / localhost上下文,没有autoDeploy。

deployXML属性文档属性文档值得一读(§标准实现)。

详尽的autoDeploy用户案例,以及删除上下文后的信息:即,未部署应用程序时,可以在此处找到已记录用户案例的文档。


2

不能回答为什么位。

然而,此链接状态,你可以通过设置制止这种autoDeploy="false"server.xml


1
在tomcat7下,autoDeploy =“ false”没什么区别:(
Joseph Lust

1

老实说,我不知道Tomcat这样做的原因是什么,但是请尝试将以下XML属性添加到您的context元素中

reloadable="false"

因此您的上下文可能看起来像这样:

<Context path="/" docBase="/some/path/name" reloadable="false">
<!-- Context related stuff -->
</Context>

这样可以防止Tomcat删除文件


不幸的是,这使开发工作变得更加困难,因为每次构建后我都必须重新启动Tomcat。
staticsan

结帐jrebel可以在开发中解决此问题:zeroturnaround.com/jrebel
harmanjd 2011年

0

我意识到这是一个旧线程,但是我想我会分享我发现的解决此问题的方法...

每当我为我的应用程序部署war文件的新副本时,tomcat桌面版的context.xml文件都会遇到完全相同的问题。

问题是由于我直接在文件系统上对此文件进行了更改。解决该问题的方法是通过我的Eclipse编辑器编辑context.xml文件。在我的Eclipse中,有一个“服务器”项目,一旦对其进行扩展,就可以看到一些文件,例如context.xml和server.xml。看来,如果您从此处修改文件而不是转到文件系统,则所做的更改将保留。

我在以下线程中找到了此解决方案:https : //www.liferay.com/community/forums/-/message_boards/message/16511799

我希望这可以帮助其他人!

-斯蒂芬斯


0

如标题所述,一般问题已从战争中重新部署而未删除上下文,这在当前仍然是一个未解决的问题。

在不删除上下文的重新部署与在取消部署后部署的情况(取消部署删除上下文)之间进行部署之间存在公认的区别。该文档已过期,并且Manager GUI仍不支持重新部署。


-1

有时,服务器中的app值必须不同,例如,存储上载文件的路径。在开发人员环境中,我们可能是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" reloadable="false">
     <Parameter name="rutaTrabajo" value="C:\Larry\Proyectos\app\rutaTrabajoxx" override="true"/>
</Context>

但是在服务器中,路径是不同的:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/App/rutaTrabajo" override="true"/>
</Context>

我也有同样的问题,tomcat从conf / Catalina / localhost删除了context.xml(meapp.xml)

为了解决这个问题,我使用context.xml.default,在同一路径中创建一个名为context.xml.default的文件,并在要保存的put config中:

 cat context.xml.default
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/ParkiMeApp/rutaTrabajo" override="true"/>
</Context>

因此,当重新部署应用程序时,confir参数仍然存在。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.