我正在寻找一种从命令行访问运行java程序的方法。最好的是做以下事情:
启动java app:
bash$java -jar MyBundle.jar App
访问应用:
bash$test.sh param1 param2
因此,test.sh
以某种方式从App
调用MyBundle.jar
并传递值param1
& param2
。
重要提示:我正在寻找非常快速的方法。 App
保持数据库连接,每次需要访问do DB时启动App
都非常昂贵。
我需要能够在Ubuntu和Debian中运行的解决方案。如果它适用于Mac - 很棒。
感谢任何帮助!
答案 0 :(得分:1)
我认为您需要采用客户端 - 服务器方法。您的应用程序是服务器,它作为后台进程运行并侦听某些端口上的连接。并且您的客户端向服务器发出请求并获取响应。
在java中实现此功能的一种快速而简单的方法是将您的应用程序包装在Jetty servlet容器中。您可以将其设置为返回JSON响应,例如,这些响应很容易处理。
答案 1 :(得分:1)
打开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
您需要使用线程来保持套接字打开以满足多个请求。