我使用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
?