如何以编程方式关闭嵌入式jetty服务器?
我像这样启动jetty服务器:
Server server = new Server(8090);
...
server.start();
server.join();现在,我想从一个请求中关闭它,比如http://127.0.0.1:8090/shutdown,我该如何干净利落地完成它?
通常提出的解决方案是创建一个线程并从该线程调用server.stop()。但是我可能需要调用Thread.sleep()来确保servlet已经完成了对关闭请求的处理。
发布于 2013-09-05 14:56:40
我发现了一个非常干净整洁的方法here
神奇的代码片段是:
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();因为关闭是从单独的线程运行的,所以它不会自己绊倒。
发布于 2011-06-17 07:48:41
试试server.setGracefulShutdown(stands_for_milliseconds);。
我认为它类似于thread.join(stands_for_milliseconds);。
发布于 2012-03-14 22:35:54
不建议通过HTTP请求远程关闭Jetty服务器,因为它提供了潜在的安全威胁。在大多数情况下,只要通过SSH连接到宿主服务器并在那里运行适当的命令来关闭Jetty服务器的相应实例就足够了。
基本思想是启动一个单独的线程作为Jetty启动代码的一部分(因此不需要像注释答案中提到的那样休眠),该线程将用作处理关闭请求的服务线程。在这个线程中,ServerSocket可以绑定到本地主机和指定的端口,当收到预期的消息时,它将调用server.stop()。
This博客文章提供了使用上述方法的详细讨论。
https://stackoverflow.com/questions/5719159
复制相似问题