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

k5hmc34c  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(479)

我正在做一些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);
    }
}

有两个要求。
有没有其他方法可以防止在不使用jvm的情况下终止上述jvm while 循环。
我想使用如下命令停止jvm java -jar server.jar -- stop 例如jetty这样的服务器。jetty使用端口并侦听停止请求的信号。有什么简单的方法吗。
第二个选项的一个选项是使用anchorfile,在启动jvm时创建文件,监视文件是否存在,并使用stopjvm删除该文件。

apeeds0o

apeeds0o1#

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

相关问题