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