【问题标题】:Start webapps in tomcat in a determinate order以确定的顺序在tomcat中启动webapps
【发布时间】:2010-12-03 00:15:08
【问题描述】:

我有 2 个网络应用程序:

WebApp 2 依赖于 WebApp 1

如果 WebApp 1 未运行,则 WebApp 2 失败

我可以在 tomcat 中定义我总是希望 webapp 1 在 webapp 2 之前启动吗?

【问题讨论】:

  • 想知道是否找到了解决此问题的方法?
  • 如果您可以安排它以便在 Tomcat 完全启动之前不会对 WebApp 1 发出任何请求,也许重新编码 WebApp 2 以在第一次请求时延迟加载它对 WebApp 1 的任何依赖项。
  • 有一个 hacky 方法。在这里查看我的答案:stackoverflow.com/questions/8793891/…
  • 点击here查看我的回答。

标签: tomcat web-applications server.xml


【解决方案1】:

根据 Apache wiki(http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q27):

没有预期的启动顺序。 Servlet 规范和 Tomcat 都不是 定义一个。你不能依赖应用程序 以任何特定顺序开始。

【讨论】:

    【解决方案2】:

    tomcat 确实没有提供任何强制部署顺序的方法。

    Tomcat 按以下顺序部署 webapp:

    1.首先部署任何上下文描述符。

    2. 任何上下文描述符未引用的已爆炸 Web 应用程序随后将被部署。如果他们在 appBase 中有关联的 .WAR 文件并且它比展开的 Web 应用程序更新,则展开的目录将被删除,并且 Web 应用程序将从 .WAR 中重新部署

    3.WAR文件将被部署

    这是一个建议的解决方案:

    如果您想指定部署顺序,请在 $CATALINA_BASE/conf/[enginename]/[hostname]/MyApp.xml 中为您的 Web 应用程序定义一个上下文

    Tomcat 通过执行 File listFiles() 扫描 $CATALINA_BASE/conf/[enginename]/[hostname]/,它返回一个按哈希值排序的 File 数组(取决于操作系统)。

    您可以使用以下代码检查 webapp 的部署顺序

    文件 file = new File("/opt/tomcat/conf/Catalina/localhost"); 文件[] 文件 = file.listFiles(); 对于(文件 f:文件) { System.out.println("文件名:" + f.getName());强文本

    【讨论】:

      【解决方案3】:

      Liferay 似乎以某种方式覆盖了 HostConfig,这使得这成为可能。基本思想是扩展 HostConfig,然后覆盖 deployApps 或单独的方法 deployDescriptors、depoyWars 和 deployDirectories 以按照您想要的方式对应用程序进行排序。然后修改 Tomcat 的 conf/server.xml,将属性 hostConfigClass 添加到 Host 元素中。

      详情请见http://www.javadocs.com/docs/com.liferay.portal/support-tomcat/6.2.0/com/liferay/support/tomcat/startup/PortalHostConfig.java。

      【讨论】:

        猜你喜欢
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 2016-04-22
        • 1970-01-01
        • 2022-11-26
        相关资源
        最近更新 更多