我正在使用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
,这意味着我需要包装我的PostHandler
的GracefulShutdownHandler
实例,该实例是在服务器启动时创建的。作为关闭钩子,我使用的是com.networknt.server.ShutdownHookProvider
的自定义实现,所以这是我应该能够调用awaitShutdown
方法的地方。关于如何访问现有处理程序的任何想法(我不想自己管理处理程序(?还是有另一种使用GracefulShutdownHandler
的方法?
light-4j有自己的ShutdownHook,供用户在服务器关闭期间注入清理逻辑。
https://github.com/networknt/light-4j/blob/master/server/src/main/java/com/networknt/server/ShutdownHookProvider.java