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

时间:2013-12-13 17:14:53

标签: java tomcat tomcat7

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

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

然后另一种方法     stopTomcat(){       pb.destroy()     }

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

我该怎样做才能阻止这种悬挂行为?我有一个等待设置..等待2分钟给Tomcat时间初始化和我的战争时间做我想要它做的事情..然后我只想关闭它。

2 个答案:

答案 0 :(得分:0)

这并没有直接解决你的最后一个问题,但是关于让嵌入式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目录

答案 1 :(得分:0)

我不确定这是不是问题,或者它只是一个解决方案......但是我让它发挥作用并希望发布如何。

Tomcat7安装注册为服务..所以,而不是从我的代码运行Tomcat7.exe ..我只是进行dos调用来启动服务:net start Tomcat7,net stop Tomcat7

感谢那些回复的人..