hddehdde 2008-08-06 14:56
浏览 393
已采纳

Tomcat下不同应用的启动顺序怎么更改???

Tomcat下有两个应用aa , bb

现在的启动顺序是先启bb 后启动aa

请问:怎么样设置下能先启动aa 等aa启动好后再启动bb ????
[b]问题补充:[/b]
没有办法? 可是为什么每次一定都是bb先启动?
Tomcat是按什么来决定先启动哪一个应用?
[b]问题补充:[/b]
如果是按文件夹的字母顺序,为什么是bb先启动,而不是aa?
[b]问题补充:[/b]
谢谢大家的回复.可能问题的根结不在启动顺序吧.
因我配了个RMI. bb要调用aa中的方法. 应该配两个虚拟主机吧

  • 写回答

5条回答 默认 最新

  • piccbj 2008-08-07 14:12
    关注

    听说tomcat 5 相比 tomcat 4 在结构上有很多变化,那么Tomcat 6有没有什么变化也没有过细去学习过。这里以tomcat 6为参考物来和大家讨论一下楼主的问题。

    Tomcat下的一个web 应用通常是对应 Server.xml 下的一个子元素的。在商业发布你的应用应用的时候你应该在下面配制和你的web 应用对应的. 但是在平时大家开发测试的时候发现不怎么做,应用也能跑,通常大家都是扔一个war包或干脆扔一个文件夹就完了,再启动tomcat,不错就可以用了。

    我们来插一段,仔细看看Tomcat中conf目录下的Server.xml文件,他基本上反映了正个Tomcat的结构。tomcat 是有容器中间组成的,而且容器嵌套的,一层包着一层,中间还有少量的公共插件。

    tomcat 是点火式引擎,由org.apache.catalina.startup.Bootstrap 这个类来点燃整个系统的启动。Bootstrap 就像一根炮引。启动顺序为:
    Server{init()-->start()} --> Service{start()} --> Connector(start()) --> Engine{start()} --> Host{start()} --> Context{start()}

    在启动过程中tomcat 就以Server.xml这个配置文件为主导的。……^_^
    下面我们回到楼主的我问题。
    应用的启动顺序是怎么定的呢,其实就是tomcat如何加载Context的问题。
    让我们打开apache-tomcat-6.0.16-src\java\org\apache\catalina\startup目录下的HostConfig.java文件,因为Context是Host的子元素,所以我们就是要看Host启动时,是如何加载Context的。找到HostConfig类的start()方法:
    [code="java"]
    ……
    public void start() {

        ……
         //deployOnStartup见StandardHost 
        if (host.getDeployOnStartup())              
            deployApps();
    
    }
    
    ……
    
     protected void deployApps() {
    
        File appBase = appBase();
        File configBase = configBase();
        // Deploy XML descriptors from configBase
        deployDescriptors(configBase, configBase.list());
        // Deploy WARs, and loop if additional descriptors are found
        deployWARs(appBase, appBase.list());
        // Deploy expanded folders
        deployDirectories(appBase, appBase.list());
    
    }
    ……
    
     protected File appBase() {
    
        if (appBase != null) {
            return appBase;
        }
    
        File file = new File(host.getAppBase());
        if (!file.isAbsolute())
            file = new File(System.getProperty("catalina.base"),
                            host.getAppBase());
        try {
            appBase = file.getCanonicalFile();
        } catch (IOException e) {
            appBase = file;
        }
        return (appBase);
    
    }
    ……
    

    [/code]
    而apache-tomcat-6.0.16-src\java\org\apache\catalina\core\StandardHost.java
    [code="java"]
    private boolean deployOnStartup = true;
    [/code]

    从deployApps()方法我们可以看出,tomcat是先加载
    Server.xml配置文件下的Context元素的,然后是处理webapps下的war应用,接着是文件夹列表(appBase.list()))。这个文件夹就是Java 里面的文件夹了。如果你真的想知道这些文件夹应用的先后顺序,你可以创建一个文件目录,该目录下包含很多目录,组成一个链表,尝试过后就应该知道先后顺序了。我猜想应该是字典顺序。^_^.

    楼主的应用有启动先后次序关系吗,希望我说的这些对你有帮助,我比较感兴趣的是楼主为什么有这个问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作