4

我需要从在这个 tomcat 上运行的 webapp 重新启动 tomcat 服务。所以我试图执行停止tomcat服务的脚本,然后启动它:

echo "before stop" >> textfile.txt
NET STOP "Tomcat7"

:loop
    timeout 3
    SC query Tomcat7 | FIND "STATE" | FIND "RUNNING" > NUL

IF ERRORLEVEL 1 (
    goto start
) ELSE (
    goto loop
)

:start
    NET START "Tomcat7"

Java代码:

   String command = "C:\\Tomcat 7.0\\bin\\restart.bat";
   Process p = Runtime.getRuntime().exec(command);

Tomcat 已停止,但未启动。如果我从命令行运行这个批处理,它可以正常工作。

感谢您的时间

4

3 回答 3

4

您所问的并不是完全安全和可能的,但请查看 Tomcat manager API,它允许您以编程方式操作 Tomcat 部署和实例:

http://tomcat.apache.org/tomcat-7.0-doc/api/index.html

http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/manager/host/HostManagerServlet.html

于 2012-08-09T00:00:47.507 回答
4

这有效:

        String fileName = "C:\\Tomcat 7.0\\bin\\restart.bat";
        String[] commands = {"cmd", "/c", "start", "\"DummyTitle\"",fileName};
        Runtime.getRuntime().exec(commands);

取自http://www.rgagnon.com/javadetails/java-0014.html

于 2012-08-09T14:31:26.063 回答
1

同意埃德蒙的观点。

Tomcat 是容器的提供者。每个容器都应该彼此独立运行,即使它们调用另一个容器提供的服务。这一切都应该通过 RMI 或类似方法完成。

就像 Edmon 还建议的那样,您可以使用 API 调用,但同样......听起来很糟糕。相反,质疑它为什么需要重新启动。然后,如果没有解决办法,请使用 Tomcat 管理器。

于 2012-08-09T01:37:19.660 回答