从命令行停止 jvm 以正常关闭

Stop jvm from commandline for gracefull shutdown

我正在为 Stilts stomp server 做一些 Poc。需要防止服务器 jvm 终止并通过另一个 jvm 来完成。这是一个代码片段

 public static void main(String[] args) {
    try {
        log.debug("Starting server...");
        StompServer<MockStompProvider> server = new StompServer<MockStompProvider>();
        server.setStompProvider( new MockStompProvider() );
        server.addConnector( new InsecureConnector() );
        server.start();
        while (true) {
            Thread.sleep(200000);
        }
    } catch (Exception ex) {
        log.error("Exception ", ex);
    }
}

有两个要求。

  1. 有没有其他方法可以在不使用 while 循环的情况下防止上述 jvm 终止。
  2. 我想使用像 java -jar server.jar -- stop 这样的命令来停止 jvm,例如像 jetty 这样的服务器。 Jetty 使用端口并监听停止请求的信号。有什么简单的方法吗

第二个选项的一个选项可以是使用 AnchorFile,在启动 jvm 时创建文件并监视文件是否存在,然后使用停止 jvm 删除该文件。

你可以用 ServerSocket 做到这一点

static final int PORT = Integer.getInteger("port", 65432);
public static void main(String[] args) {
    if (args.length > 0) {
        new Socket("localhost", PORT);
        return;
    }

    try {
        log.debug("Starting server...");
        StompServer<MockStompProvider> server = new StompServer<MockStompProvider>();
        server.setStompProvider( new MockStompProvider() );
        server.addConnector( new InsecureConnector() );
        server.start();
        new ServerSocket(PORT).accept();

    } catch (Exception ex) {
        log.error("Exception ", ex);
    }
}