gpt4 book ai didi

java - 从 spring webservice 执行进程并监控?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:49:04 24 4
gpt4 key购买 nike

问题: 我想在 spring boot 项目中从 webservice 执行 java jar 文件。并希望对其进行监控。

问题:我能够执行这个过程,但问题是该过程没有进一步处理。

我想知道为什么这个进程在等待,为什么它没有被处理。我如何监控它的进度。

它在以下条件下得到处理:

  1. 一旦我停止了 spring boot 项目或 tomcat。
  2. 如果我删除 process.waitFor();
  3. ,它会得到处理

我尝试了 this 中的解决方案,即从另一个线程执行进程。

我的网络服务调用

@RequestMapping(value="/startAnalysis", method=RequestMethod.POST)
public String startAnalysis() {
List<String> cmd = new ArrayList<>();
cmd.add("java");
cmd.add("-jar");
cmd.add("test.jar");
try {
//Process p = Runtime.getRuntime().exec(cmd.toArray(new String[0]));

//ProcMon procMon = new ProcMon(cmd);
//Thread t = new Thread(procMon);
//t.setName("procMon");
//t.start();

ProcessBuilder processBuilder = new ProcessBuilder(cmd);
Process process = processBuilder.start();
process.waitFor();

} catch (Exception e) {
e.printStackTrace();
}
return "success";
}

最佳答案

进程通常会等待它的输出被调用进程使用。有时这只是意味着输出显示在终端上,但在这种情况下,您可能需要读取输入流直到它阻塞。如果您不知道进程应该如何运行,您可能只想在单独的线程中读取 process.getInputStream() 。在某些状态下,您的进程也可能正在等待将某些内容写入 process.getOutputStream()。

您需要检查 jar 的文档,或者直接从命令提示符/shell 执行它并查看它的行为。然后您可以更改您的应用程序以按照您期望的方式读取输出。

在许多应用程序中,输出最容易逐行读取:

final String EXPECTED_OUTPUT = "Hello World";

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String firstLine = reader.readLine();
if (!firstLine.equals(EXPECTED_OUTPUT)) {
// handle unexpected situation
}
// maybe handle some more output
// or send something to the process.getOutputStream() in response
// and finally wait for the application to exit when it should be done
process.waitFor();

关于java - 从 spring webservice 执行进程并监控?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46957466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com