gpt4 book ai didi

java - Servlet 启动外部进程

转载 作者:行者123 更新时间:2023-12-02 06:39:39 25 4
gpt4 key购买 nike

我们正在从 Servlet 启动外部进程。

try {
Process proc = Runtime.getRuntime().exec("java -jar " + jarLocation );
  • Servlet 和外部进程使用相同的用户 ID/密码访问同一数据库。

  • servlet 不等待外部进程完成。

  • Servlet 在不到一秒的时间内完成其处理。

  • 从 Servlet 启动时,外部应用程序至少需要两分钟才能完成。

  • 在独立模式下运行时,外部应用程序大约需要 5 秒才能完成。

我们尝试在外部进程启动后停止网络应用程序,这导致外部进程立即完成。

因此,Servlet 和外部进程之间似乎存在某种交互,导致该进程需要很长时间才能完成。几天来我们一直试图弄清楚会发生什么,但一无所获。

有人知道这里会发生什么吗?

最佳答案

您需要在 servlet 进程中使用生成进程的 stdout/stderr。

否则,生成的进程可能会阻塞等待其被消耗。这样做有点复杂 - 请参阅 this answer及其 linked article了解更多信息。

请注意,您应该执行 Process.waitFor() 来收集生成的进程退出代码。否则你的手上就会有一个僵尸。因此,您可能希望将所有这些包装在一个单独的线程中,以便您的 servlet 可以生成该进程并立即返回。

话虽如此,如果您要启动一个新的 Java 进程,难道您不能简单地重构它,以便从同一个 JVM 中将其作为库函数调用吗?产卵过程是一项相对繁重且耗时的任务。

关于java - Servlet 启动外部进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276881/

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