从shell命令访问正在运行的java程序

发布于 2024-11-11 13:50:20 字数 496 浏览 1 评论 0原文

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

启动java应用程序:

bash$java -jar MyBundle.jar App

访问应用程序:

bash$test.sh param1 param2

因此,test.sh以某种方式从MyBundle.jar调用App并传递值 param1 & 参数2

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

我需要能在 Ubuntu 和 Debian 中运行的解决方案。如果它能在 Mac 上运行 - 那就太好了。

任何帮助表示赞赏!

I am looking for a way to access running java program from command line. The best woud be something that does the following:

Starting java app:

bash$java -jar MyBundle.jar App

Accessing app:

bash$test.sh param1 param2

So, test.sh calls App from MyBundle.jar somehow and passes values param1 & param2.

Important: I am looking for very fast approach. App hold database connection and it is very expensive to start App every time I need access do DB.

I need solution that will work in Ubuntu and Debian. If it will work on Mac - great.

Any help is appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野生奥特曼 2024-11-18 13:50:20

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

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

I think you need to take a client-server approach. You app is the server, it runs as a background process and listens for connections on some port. And your client makes requests to the server and gets back the response.

A fast and simple way of implementing this in java would be to wrap your app in the Jetty servlet container. You could set it up to return JSON responses for example, which are easy to process.

狠疯拽 2024-11-18 13:50:20

打开 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

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

It would be quite straightforward to open a TCP/IP socket and use netcat from the shell.

Java code

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 code

echo 'bla' | nc localhost 9050

You'd need to muck around with threads to keep the sockets open to serve multiple requests.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文