[英]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
并传递值param1
和param2
。
重要提示:我正在寻找非常快速的方法。 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.