7

如何以编程方式关闭嵌入式码头服务器?

我像这样启动码头服务器:

Server server = new Server(8090);
...
server.start();
server.join();

现在,我想从一个请求中关闭它,例如http://127.0.0.1:8090/shutdown 我如何干净地做到这一点?

通常建议的解决方案是创建一个线程并从该线程调用 server.stop() 。但我可能需要调用 Thread.sleep() 以确保 servlet 已完成对关闭请求的处理。

4

3 回答 3

6

我在这里找到了一个非常干净整洁的方法

神奇的代码片段是:-

        server.setStopTimeout(10000L);;
        try {
            new Thread() {
                @Override
                public void run() {
                    try {
                        context.stop();
                        server.stop();
                    } catch (Exception ex) {
                        System.out.println("Failed to stop Jetty");
                    }
                }
            }.start();

因为关闭是从一个单独的线程运行的,所以它不会自己跳闸。

于 2013-09-05T06:56:40.340 回答
2

试试server.setGracefulShutdown(stands_for_milliseconds);

我认为它类似于thread.join(stands_for_milliseconds);

于 2011-06-16T23:48:40.660 回答
1

不建议通过 HTTP 请求远程关闭 Jetty 服务器,因为它提供了潜在的安全威胁。在大多数情况下,通过 SSH 连接到托管服务器并在那里运行适当的命令来关闭 Jetty 服务器的相应实例就足够了。

基本思想是启动一个单独的线程作为 Jetty 启动代码的一部分(因此不需要按照评论答案中提到的一个要求休眠),它将用作处理关闭请求的服务线程。在这个线程中,aServerSocket可以绑定到 localhost 和指定端口,当收到预期的消息时,它会调用server.stop().

这篇博文提供了使用上述方法的详细讨论。

于 2012-03-14T14:35:53.800 回答