首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序化Jetty关闭

程序化Jetty关闭
EN

Stack Overflow用户
提问于 2011-04-19 23:53:52
回答 3查看 13.6K关注 0票数 7

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

我像这样启动jetty服务器:

代码语言:javascript
复制
Server server = new Server(8090);
...
server.start();
server.join();

现在,我想从一个请求中关闭它,比如http://127.0.0.1:8090/shutdown,我该如何干净利落地完成它?

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

EN

回答 3

Stack Overflow用户

发布于 2013-09-05 14:56:40

我发现了一个非常干净整洁的方法here

神奇的代码片段是:

代码语言:javascript
复制
        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();

因为关闭是从单独的线程运行的,所以它不会自己绊倒。

票数 6
EN

Stack Overflow用户

发布于 2011-06-17 07:48:41

试试server.setGracefulShutdown(stands_for_milliseconds);

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-14 22:35:54

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5719159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档