有没有办法在tomcat6中强制执行部署顺序?

wle*_*eao 13 deployment tomcat tomcat6

我的webapp文件夹中有3场战争.其中两个建立在第三个服务的基础上.我在测试环境中,即我无法控制他们的架构,所以我无法改变一件事.所以...

问题:有没有办法在tomcat中强制执行部署顺序?

我碰到一个问题,这里的计算器,但没有解决方案.

好吧,实际上这家伙建议将webapps的名称更改为按字母顺序排列会有所帮助.但是,每次我需要测试那些和不同的战争时,我都不愿意这样做.

我很肯定有一种方法可以配置一个tomcat conf .xml文件.我只是不知道哪一个.

小智 17

来自Tomcat Wiki - Webapps开始的顺序是什么(或者我如何更改启动顺序)?

没有预期的启动订单.Servlet规范和Tomcat都没有定义.您不能依赖以任何特定顺序开始的应用程序.

Tomcat 从未支持指定webapps的加载顺序.还有像JBoss这样的其他容器,但Tomcat从来没有.通过Web应用程序名称的字母顺序看起来像加载顺序的任何明显行为都是巧合,并不能保证在所有情况下都能正常工作.

您可能正在考虑的是<load-on-startup/>元素,如果web.xml它指定加载顺序servlets.

这就是使用服务发现协议的优雅解决方案.

一种解决方案是使用ZeroConf之类的东西,并在启动时注册您的服务,然后让相关的应用程序在这些服务可用时查找并让它们连接并在服务准备就绪时执行它们需要做的事情.这就是我多年来一直处理多个依赖服务的方式.我有Python,Java和Erlang服务都通过ZeroConf无缝地发现彼此.


小智 7

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

*Tomcat按以下顺序部署webapp:*

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

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

3.WAR文件将被部署

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


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

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

您可以使用以下代码来检查将部署Webapps的顺序

File file = new File("/opt/tomcat/conf/Catalina/localhost");
        File[] files = file.listFiles();
        for (File f : files)
        {
            System.out.println("Filename: " + f.getName());
        }
Run Code Online (Sandbox Code Playgroud)