我正在从 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/