【问题标题】:How to communicate with existing java process如何与现有的java进程通信
【发布时间】:2011-05-06 15:13:29
【问题描述】:

如何将一些值从 shell 脚本传递给已经运行的 Java 程序?

【问题讨论】:

  • @ssbecse 您似乎激怒了下面的许多评论者,他们以一种使他们完全有效的答案无效的方式修改了问题。 %-|请下次更清楚。我们在这里不是读心术,不是免费的。
  • 原问题改了。发布原始问题时,我的回答是有效的。

标签: java shell


【解决方案1】:

独立的 Java 应用程序已经在运行,所以命令行参数是没有问题的。

剩下的最简单的选择是轮询文件、套接字和 HTTP 服务器。

轮询文件:

让您的 Java 应用在几秒钟内读取一次特定目录。如果该目录中出现文件,请阅读它并按照它说的做。制作你的 shell 脚本来形成那个文件。

套接字:

让您的 java 应用程序在套接字上侦听。使用 netcat 或类似的实用程序向该套接字发送命令。

HTTP 服务器:

在 Java 进程中启动 HTTP 侦听器。使用 wget 或类似实用程序将您的命令发布到该侦听器:

HttpServer httpServer = HttpServer.create(new InetSocketAddress(port), 5);
httpServer.createContext("/", new TileServerRequestHandler());
httpServer.setExecutor(Executors.newCachedThreadPool());
httpServer.start();

【讨论】:

    【解决方案2】:

    将参数写入您的进程定期询问的文件?粗鲁,但它会起作用(但有很多使用限制)。 或者让您的进程在套接字上侦听并让您的 shell 脚本将参数发送到套接字。

    【讨论】:

      【解决方案3】:

      与 Java 进程通信的一个选项是Java Messaging Service API。您的 shell 脚本可以启动 JMS 客户端以向主应用程序发送消息。

      【讨论】:

      • 你好,我真的遇到了类似的问题,你能解释一下类似的设计模式吗
      • @NirajSanghani 我可以。如果您有兴趣,我也可以与您分享我的每小时咨询费率。但鉴于您已经在问答网站上,我建议您自己进行足够的研究,以便能够提出更具体的问题,然后将它们发布在这里!
      【解决方案4】:

      查看如何将命令行参数传递给java here

      编辑:问题中的新信息意味着这不再是一个合适的解决方案

      【讨论】:

      • 投反对票的人请注意,答案对最初的问题完全有效。
      猜你喜欢
      • 2014-04-26
      • 2015-11-17
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      相关资源
      最近更新 更多