java - 使用 ShutdownHandler 关闭 Jetty

标签 java jetty

我正在使用http://www.eclipse.org/jetty/documentation/current/shutdown-handler.html作为尝试关闭我的 jetty 服务器的指南,但当调用 connection.getResponseCode(); 时,我收到 java.net.SocketException: Unexpected end of file from server ,我不知道为什么。我使用的是 xml 配置的服务器,因此将 ShutdownHandler 添加到 Handler 链的方式有点不同,但应该没问题。我知道 ShutdownHandler 已正确连接到处理程序链,因为我使用 dumpAfterStartup 来检查它是否已启动。

我最不确定的是这一行:URL url = new URL("http://localhost:"+ port + "/shutdown?token="+ shutdownCookie);。我不知道应该在 shutdownCookie 字段中放入什么; ShutdownHandler 中指定的密码,或 STOP 键,或其他什么。我已经尝试了密码和停止键,但没有成功。我使用 POST 作为我的请求方法,但我也尝试过 PUT,但它也不起作用。

请根据需要索取更多信息。

最佳答案

shutdownCookie 应该是您配置关闭处理程序的 secret

如果处理程序链配置正确,这将起作用...

 public void start() throws Exception
    {
        Server server = new Server(10100);
        DebugHandler dh = new DebugHandler();
        dh.setHandler(new ShutdownHandler(server,"foo"));
        server.setHandler(dh);
        server.start();
    }

    public static void attemptShutdown(int port, String shutdownCookie)
    {
        try
        {
            URL url = new URL("http://localhost:" + port + "/shutdown?token=" + shutdownCookie);
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("POST");
            connection.getResponseCode();
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }


    public static void main(String[] args) 
    {
        try
        {
            Shutdown s = new Shutdown(); 
            s.start();     
            Shutdown.attemptShutdown(10100,"foobar");          
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

这会产生以下日志:

 Aug 22, 2013 9:31:25 AM org.eclipse.jetty.server.Server doStart
 INFO: jetty-8.1.11.v20130520
 Aug 22, 2013 9:31:25 AM org.eclipse.jetty.server.AbstractConnector doStart
 INFO: Started SelectChannelConnector@0.0.0.0:10100
 Aug 22, 2013 9:31:25 AM org.eclipse.jetty.server.handler.ShutdownHandler handle
 WARNING: Unauthorized shutdown attempt from 127.0.0.1

将 shutdownCookie 从“foobar”更改为“foo”会产生:

2013-08-22 10:13:00.829:INFO:oejsh.ShutdownHandler:Shutting down by request from 127.0.0.1

您可以使用上面的代码并从另一个 JVM 调用静态方法,第一个服务器将按预期停止。

关于java - 使用 ShutdownHandler 关闭 Jetty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342014/

相关文章:

java - SignaturePropFile 的 Axis2/rampart 加密问题

java - 启动 bundle org.eclipse.jetty.osgi.boot 时出错(Eclipse 中的 OSGi 框架)

Gradle:使用 Jetty 运行多个 Web 应用程序

java - 如何多次读取Jetty HttpInput(ServletInputStream)?

java - 如何设置jetty runnier应用程序的WebAppContext?

servlets - Clojure、Servlet 和 JWT

java - 将 Web Controller 添加到 Akka Actor 系统

java - 保存一些数据 sqlite、SharedPreferences 或文件?

java - switch语句循环

java - 无法解析配置 ':app:debugRuntimeClasspath' 的所有文件。问题