【问题标题】:How to start and stop tomcat using java code?如何使用java代码启动和停止tomcat?
【发布时间】:2011-03-10 05:50:24
【问题描述】:

如何使用java代码启动和停止tomcat?

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    您可以向关闭端口发送关闭命令,这两个端口都可以在Tomcat的server.xml文件的根元素中配置。

    按步骤:

    第 1 步

    如下配置CATALINA_HOME/conf/server.xml:

    <Server port="8005" shutdown="myShutDownCommand">
    

    属性端口是可选的。如果省略,则使用默认值 8005。

    shutdown 属性的值可以是任何值。这不应该被其他人知道。

    第 2 步

    使java程序使用java.net.Socket类发送关机命令myShutDownCommand到关机端口8005。

    try { 
        Socket socket = new Socket("localhost", 8005); 
        if (socket.isConnected()) { 
            PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); 
            pw.println("myShutDownCommand");//send shut down command 
            pw.close(); 
            socket.close(); 
        } 
    } catch (Exception e) { 
        e.printStackTrace(); 
    }
    

    【讨论】:

    • 这只会关闭服务器。同理,是否可以重启服务器?
    • 我在 Eclipse 上运行服务器,它没有停止 tomcat。
    • 是否可以在正在运行的 WAR 中执行该代码?我得到一个带有该代码的“javax.management.InstanceNotFoundException: Catalina:type=Deployer,host=localhost”
    【解决方案2】:

    需要执行org.apache.catalina.startup.Bootstrapmain方法,参数"start"

    你还需要以下东西:

    • 在你的类路径中有tomcat/bin/bootstrap.jar
    • -Dcatalina.base 指向$TOMCAT_HOME
    • -Dcatalina.home 指向$TOMCAT_HOME
    • -Djava.io.tmpdir 指向一个临时目录(通常是$TOMCAT_HOME/temp

    我也有-noverify参数集,不确定是否总是需要。

    附言如果您可以开始接受答案也很好,您当前的费率为 0/28。

    【讨论】:

    • -noverify 在类加载期间禁用检查。当您以安全为代价拥有庞大的 Web 应用程序时,它可以让 Tomcat 启动得更快。
    • 您能否更具体地使用参数“start”执行 org.apache.catalina.startup.Bootstrap 的 main 方法。我们怎么能这样做。我在使用 bootstrap.jar 启动 tomcat 时遇到问题
    • @TanviGarg Bootstrap 类具有 main(String[] args) 方法,并且必须将 start 参数传递给此 String 数组。通常这是通过你必须模仿的 shell 脚本来完成的。
    • 我可以使用 java -jar bootstrap.jar start 启动 tomcat 吗?
    【解决方案3】:

    您可以使用 java 执行本机命令

    String command = "c:\program files\tomcat\bin\startup.bat";//for linux use .sh
    Process child = Runtime.getRuntime().exec(command);
    

    【讨论】:

    • 我有同样的问题,上述解决方案对我不起作用。我遵循了这个解决方案,虽然它停止了异常但仍然没有启动tomcat:servlets.com/archive/servlet/…
    • @dhaval 那么有什么例外,不开始是什么意思
    • “CATALINA_HOME 环境变量定义不正确”这是个例外。并在使用“command.com /c ”后停止异常但tomcat没有启动。
    • 你声明CATALINA_HOME了吗?
    • File file = new File("path to tomcat bin"); Process p = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", "start" ,"path to startup.bat", "start"}, null, file); 这段代码终于成功了
    【解决方案4】:

    启动(和停止)嵌入式 Tomcat。如何做到这一点有很好的记录,例如here

    【讨论】:

      【解决方案5】:

      对于使用 java 的 Linux 用户,试试这个:

      Runtime run = Runtime.getRuntime();
      Process pr = run.exec("sh startup.sh", null, new File("filePath"));
      filePathexample = /home/example/apache-tomcat-8.0.47/bin/
      

      【讨论】:

        最近更新 更多