Java 程序性码头关闭
如何以编程方式关闭嵌入式jetty服务器 我启动jetty server的方式如下: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
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+服务器