从shell命令访问运行java程序

时间:2011-05-31 14:10:54

标签: java unix command-line nio

我正在寻找一种从命令行访问运行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 - 很棒。

感谢任何帮助!

2 个答案:

答案 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

您需要使用线程来保持套接字打开以满足多个请求。