有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java等待tomcat完成启动

我有一个脚本需要在tomcat完成启动并准备开始部署应用程序后运行。我正在使用立即返回的$TOMCAT_HOME/bin/startup.sh。我怎样才能等到tomcat完成启动


共 (6) 个答案

  1. # 1 楼答案

    通过编程实现并不难。您可以实现org。阿帕奇。卡塔琳娜。生命周期,然后你就有了

    public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
                if(lifecycleEvent.getType().equals(Lifecycle.START_EVENT))
                //do what you want
                }       
    }
    

    在网上。xml:

    <Context path="/examples" ...>
    ...
    <Listener className="com.mycompany.mypackage.MyListener" ... >
    ...
    </Context>
    

    请注意,6-9只雄猫之间可能存在一些差异

  2. # 2 楼答案

    这取决于你所说的完成。你想等什么

    例如,你可以让一个脚本反复点击一个URL,直到它得到一个理想的结果,而这个结果只有在应用程序正确初始化后才可用

    您还可以有一个上下文侦听器,它写出一个“我准备好了”文件,您可以用它来表示应用程序已经准备就绪。(如果执行此操作,请在启动应用程序容器之前确保该文件不存在)

  3. # 3 楼答案

    我需要这个从jenkins测试远程服务器的tomcat是否启动进行系统检查

    until [[ `ssh -o StrictHostKeyChecking=no root@${DEPLOY_HOST} 'netstat -tulpn | grep 8005'` != "" ]] ; do echo "waiting for tomcat"; sleep 6; done

  4. # 4 楼答案

    你还在寻找答案吗?这取决于你对开始的定义。如果started的定义为“现在可以安全停止”,则可能需要验证端口8005是否正在侦听

  5. # 5 楼答案

    可能有几种方法可以做到这一点。我们使用的技巧是:

    #!/bin/bash
    
    until [ "`curl --silent --show-error --connect-timeout 1 -I http://localhost:8080 | grep 'Coyote'`" != "" ];
    do
      echo --- sleeping for 10 seconds
      sleep 10
    done
    
    echo Tomcat is ready!
    

    希望这有帮助

  6. # 6 楼答案

    没有一个简单的方法。至于启动。她和卡塔琳娜。当他们结束时,tomcat正在运行。尽管在内部,tomcat仍在初始化和启动上下文

    如果你想知道你的上下文是否已经加载完毕,或者你只是想要一个通用的“Tomcat正在运行,尽管你的上下文可能还没有完全加载……”,这会很有帮助

    如果是后者,您可以创建一个web应用程序,该应用程序仅具有一个上下文侦听器,该侦听器将使用运行时执行脚本。如果您很方便,可以通过web配置webapp。xml文件,以接受指向要执行的脚本的参数