繁体   English   中英

从 shell 命令访问运行 java 程序

[英]Access running java program from shell command

我正在寻找一种从命令行访问正在运行的 java 程序的方法。 最好的方法是执行以下操作:

启动 java 应用程序:

bash$java -jar MyBundle.jar App

访问应用程序:

bash$test.sh param1 param2

因此, test.sh以某种方式从MyBundle.jar调用App并传递值param1param2

重要提示:我正在寻找非常快速的方法。 App保持数据库连接,每次我需要访问数据库时启动App非常昂贵。

我需要适用于 Ubuntu 和 Debian 的解决方案。 如果它可以在 Mac 上运行 - 太好了。

任何帮助表示赞赏!

我认为您需要采用客户端-服务器方法。 您的应用程序是服务器,它作为后台进程运行并侦听某个端口上的连接。 您的客户端向服务器发出请求并取回响应。

在 java 中实现此功能的一种快速简单的方法是将您的应用程序包装在Jetty servlet 容器中。 例如,您可以将其设置为返回 JSON 响应,这些响应易于处理。

打开 TCP/IP 套接字并使用 shell 中的netcat将非常简单。

Java码

final ServerSocket serverSocket = new ServerSocket(9050);
while (true) {
    final Socket socket = serverSocket.accept();
    java.util.logging.Logger.getAnonymousLogger().info("Accepted");
    final BufferedReader br = new BufferedReader(new InputStreamReader(
            socket.getInputStream()));
    final String input = br.readLine();
    final BufferedWriter bw = new BufferedWriter(
            new OutputStreamWriter(socket.getOutputStream()));
        bw.write("You said [" + input + "]");
    bw.flush();
    socket.close();
}

Shell代码

echo 'bla' | nc localhost 9050

您需要使用线程来保持 sockets 打开以服务多个请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM