我有 2 个网络应用程序:
WebApp 2 依赖于 WebApp 1
如果 WebApp 1 未运行,则 WebApp 2 失败
我可以在 tomcat 中定义我总是希望 webapp 1 在 webapp 2 之前启动吗?
我有 2 个网络应用程序:
WebApp 2 依赖于 WebApp 1
如果 WebApp 1 未运行,则 WebApp 2 失败
我可以在 tomcat 中定义我总是希望 webapp 1 在 webapp 2 之前启动吗?
根据 Apache wiki(在http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q27):
没有预期的启动顺序。Servlet 规范和 Tomcat 都没有定义一个。您不能依赖以任何特定顺序启动的应用程序。
确实,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 file = new File("/opt/tomcat/conf/Catalina/localhost"); 文件[] 文件 = file.listFiles(); for (文件 f : 文件) { System.out.println("文件名: " + f.getName()); 强文本
Liferay 似乎以一种使这成为可能的方式覆盖了 HostConfig。基本思想是扩展 HostConfig,然后覆盖 deployApps 或单独的方法 deployDescriptors、depoyWars 和 deployDirectories 以按照您想要的方式对应用程序进行排序。然后通过将属性 hostConfigClass 添加到 Host 元素来修改 Tomcat 的 conf/server.xml。