Java ProcessBuilder.start(Tomcat7.exe) 启动进程但它挂起帮助吗?

标签 java tomcat tomcat7

我正在从 Java 类中以编程方式启动现有的 Tomcat 7 安装。 伪代码.. 无聊的细节,比如排除了我的 tomcat 的完整路径

startTomcat(){
  ProcessBuilder pb = new ProcessBuilder("Tomcat7.exe");
  pb.start();
}

然后是另一种方法 停止 Tomcat() { pb.destroy()

当调用 startTomcat() 时,我可以看到 Tomcat7 出现在 Windows 进程列表中,但它只使用 24k 内存并且没有任何内容进入日志...所以当调用 stop 时它就死了..基本上什么都没有发生了。如果我取消对 stopTomcat() 的调用,一旦我的对象运行完毕,Tomcat 服务器就会正式启动。资源增加到 500k+,日志开始充满来自该安装中的应用程序的 Activity 。

我能做些什么来阻止这种悬挂行为?我有一个等待设置 .. 等待 2 分钟让 Tomcat 有时间进行初始化和我的 war 时间来做我想要它做的事情 .. 然后我只想关闭它。

最佳答案

这并没有直接解决您的最终问题,但是关于让嵌入式 Tomcat 正确扫描整个类路径,请尝试以下方法:

Path baseDir = Files.createTempDirectory("integration-test").toAbsolutePath();

tomcat = new Tomcat();
tomcat.setBaseDir(baseDir.toString());

tomcat.setHostname("localhost");
tomcat.setPort(0); // random free port

Context context = tomcat.addWebapp("/", baseDir.toString());

StandardJarScanner jarScanner = (StandardJarScanner) context.getJarScanner();
jarScanner.setScanAllDirectories(true);

tomcat.start();

endpoint = URI.create("http://localhost:" + tomcat.getConnector().getLocalPort());

关键是 jarScanner.setScanAllDirectories(true),它会导致扫描器查找类路径上的所有目录 ,这些目录本身包含 META-INF 目录.

关于Java ProcessBuilder.start(Tomcat7.exe) 启动进程但它挂起帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572222/

相关文章:

java - 运行代理时内存不足

java - Java 仪器中的 Transformer

java - Spring 3 + JPA + TomCat 7

apache - $CATALINA_HOME 里面没有 conf

tomcat - 是否可以知 Prop 有 URL 的 Tomcat 版本?

java - jasper 上的远程 MYSQL 报告错误 : com. 找不到 mysql.jdbc.Driver

java - java中的自动登录功能

java - JAXB - 解码时遵循 keyref 的示例

java - Tomcat 7 忽略 cookies?

c# - IIS/C# 网站与 Tomcat/Java 网站共享身份验证 - 相同的顶级 URL