【问题标题】:Make tomcat application stopped by default使tomcat应用程序默认停止
【发布时间】:2016-05-07 07:53:54
【问题描述】:

使用 Tomcat Web 应用程序管理器,我可以停止、启动、重新加载和取消部署特定的应用程序。我以这种方式停止的任何应用程序都会在 Tomcat 本身重新启动时自动重新启动。

如何将特定应用程序配置为在 Tomcat 启动时不启动,而仅在我通过 Web 应用程序管理器自己启动时启动?

【问题讨论】:

  • “默认停止”和“默认未部署”是两个不同的东西。两个未经验证的答案似乎在错误的地方回答,对吗?

标签: java tomcat


【解决方案1】:

server.xml 的Host 元素中有deployIgnore 属性。

它接受不部署的上下文正则表达式。

参考here

定义在 autoDeploy 和 deployOnStartup 已设置。这使您可以将配置保留在 例如,版本控制系统,而不是部署 .svn 或 CVS 恰好在 appBase 中的文件夹。

这个正则表达式是相对于 appBase 的。它也被锚定, 这意味着匹配是针对整个文件/目录名称执行的。 所以,foo 只匹配一个名为 foo 的文件或目录,而不是 foo.war, foob​​ar 或 myfooapp。要与“foo”匹配任何内容,您可以使用 .foo..

更多解释here

主机的 appBase 目录中的任何 Web 应用程序存档文件 由于上下文 XML 而尚未部署的 描述符,没有对应的同名目录 (没有“.war”扩展名),并且不被 deployIgnore 排除在外 接下来会部署。使用的上下文路径将是一个斜杠字符 ("/") 后跟 Web 应用程序存档名称减去 ".war" 延期。此规则的一个例外是 Web 应用程序 名为“ROOT.war”的存档将使用 / 的上下文路径进行部署。 可以使用 # 定义多级上下文,例如使用名为 foo#bar.war 用于 /foo/bar 的上下文路径。

更新

为了证明我的回答,我尝试在下面回复@rgh 评论。

刚刚下载了最新版本的 Tomcat8 (8.0.30)。 它确实(以及其他)附带了 Web 应用程序“示例”。

开始不进行任何修改(摘自 catalina.out):

Deploying web application directory /home/opt/apache-tomcat-8.0.30/webapps/examples 
Deployment of web application directory /home/opt/apache-tomcat-8.0.30/webapps/examples has finished in 256 ms

从修改后的 server.xml 开始:

<Host name="localhost"  appBase="webapps" deployIgnore="^examples$" unpackWARs="true" autoDeploy="true">

阻止部署应用程序“示例”。

所以在你的情况下,试试这个

<Host name="localhost"  appBase="webapps" deployIgnore="^welcome$" unpackWARs="true" autoDeploy="true">

【讨论】:

  • 如果目录结构已经在 webapps 中设置好了,这个解决方案就不起作用了,是吗?例如,我有一个 webapps/welcome 文件夹,但我不希望tomcat 附带的welcome 应用程序在tomcat 重新启动时自动启动。修改 server.xml 以包括: 不会停止欢迎应用程序的启动。
  • 好吧,谢谢 rkosegi,也许它在 tomcat 7 上有所不同,但对我来说这种技术不起作用: 信息:Web 应用程序存档 C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\welcome.war 的部署已在 469 毫秒内完成
  • @rgh :我刚刚在 Windows 上使用 Tomcat 7.0.64 进行了尝试。它按预期工作。试试这个 deployIgnore="^welcome.*"
  • 啊!这样可行!现在的问题是欢迎应用程序根本没有出现在管理器应用程序中,所以我无法在需要时启动它。
  • 嗨,大约一年后我看到了这个问题/答案。就像 rgh 的最后一条评论(2016 年 2 月 2 日)一样,我可以禁止我的 web 应用程序被 tomcat 自动启动(而其他应用程序仍在启动,包括管理器),但是我的管理器现在正在显示该 web 应用程序。你找到解决办法了吗?
【解决方案2】:

您需要在conf/server.xml 中的&lt;Host> 元素上设置deployOnStartup="false"。请注意,这将导致manager 应用程序在启动时不部署。你有几个选择:

  1. conf/server.xml 中使用&lt;Context&gt; 配置管理器
  2. 使用单独的 &lt;Host&gt;deployOnStartup="true" 并将管理器部署到该主机

Automatic Deployment Documentation 是一个很好的资源,可以查看哪些事件和配置的组合会表现出哪些行为。

【讨论】:

  • 使用 conf/server.xml 配置管理器 的任何示例
  • 我可以告诉你怎么做,但是 (a) 很容易弄清楚, (b) 不建议将 &lt;Context&gt; 放入 conf/server.xml,所以不要这样做。如果您不希望服务器在启动时启动您的应用程序,那为什么一开始就在那里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 2012-12-28
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多