在Undertow中正常关闭

时间:2017-08-28 12:58:43

标签: undertow light-4j

我正在使用light4j和Undertow构建一个轻量级Java应用程序,我需要一种机制来等待现有请求在关闭服务器之前完成。我发现了GracefulShutdownHandler的存在,我设法将它包裹在io.undertow.server.HttpHandler内的常规com.networknt.server.HandlerProvider内,如下所示:

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吗?

1 个答案:

答案 0 :(得分:1)

light-4j有自己的ShutdownHook,供用户在服务器关闭期间注入清理逻辑。

https://github.com/networknt/light-4j/blob/master/server/src/main/java/com/networknt/server/ShutdownHookProvider.java