2017-08-28 161 views
0

我使用light4j和Undertow构建了一个轻量级Java应用程序,我需要一种机制来等待现有请求在关闭服务器之前完成。我发现的GracefulShutdownHandler的存在,我设法将其套在正规io.undertow.server.HttpHandler,一个com.networknt.server.HandlerProvider里面,像这样:Undertow中的优雅关闭

public class PathHandlerProvider implements HandlerProvider { 

@Override 
public HttpHandler getHandler() { 
    return Handlers.routing() 
      .add(Methods.POST, "/something", Handlers.gracefulShutdown(new PostHandler())); 
} 

的问题是,在关闭服务器时io.undertow.server.handlers.GracefulShutdownHandler#awaitShutdown需要显式调用,这意味着我需要GracefulShutdownHandler的实例包装我的PostHandler,这是在服务器启动时创建的。作为关机钩子,我使用的是自定义实现com.networknt.server.ShutdownHookProvider,所以这是我应该能够调用awaitShutdown方法的地方。关于如何访问现有处理程序的任何想法(我不想自己管理处理程序)?还是有另一种方式使用GracefulShutdownHandler

回答