从命令行停止jvm以进行gracefull关闭

时间:2016-03-28 11:28:36

标签: java jvm shutdown-hook

我正为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使用端口并侦听停止请求的信号。有没有简单的方法。
  3. 第二个选项的一个选项可以是使用AnchorFile,在启动jvm时创建文件并监视文件是否存在并使用stop jvm删除该文件。

1 个答案:

答案 0 :(得分:1)

您可以使用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);
    }
}