Java 程序性码头关闭

Java 程序性码头关闭,java,jetty,embedded-jetty,Java,Jetty,Embedded Jetty,如何以编程方式关闭嵌入式jetty服务器 我启动jetty server的方式如下: Server server = new Server(8090); ... server.start(); server.join(); 现在,我想从一个请求中关闭它,例如 我怎样才能做到干净呢 通常建议的解决方案是创建一个线程并从此线程调用server.stop()。 但我可能需要调用Thread.sleep(),以确保servlet已完成对关闭请求的处理。Tryserver.setGracefulShut

如何以编程方式关闭嵌入式jetty服务器

我启动jetty server的方式如下:

Server server = new Server(8090);
...
server.start();
server.join();
现在,我想从一个请求中关闭它,例如 我怎样才能做到干净呢

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

Try
server.setGracefulShutdown(表示毫秒)


我认为它类似于
thread.join(表示\u毫秒)

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

基本思想是作为Jetty启动代码的一部分启动一个单独的线程(因此不需要按照注释回答中提到的其中一个线程的要求进行睡眠),该线程将用作处理关闭请求的服务线程。在这个线程中,
ServerSocket
可以绑定到本地主机和指定的端口,当收到预期的消息时,它将调用
server.stop()


博客文章使用上述方法提供了详细的讨论

我找到了一个非常简洁的方法

神奇的代码片段是:-

        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();

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

多么讽刺的是,这个网站上的第一个谷歌结果是一个问题,回答了你的问题:它是如何启动的?请提供更多关于环境的信息,您会得到更好的回答。是的。但这不是一个干净的解决方案。使用这个解决方案,我需要在调用server.stop()之前找到一个正确的睡眠时间。这个问题现在是google搜索的第一个结果,这有多讽刺?q=编程+停止+jetty+服务器