2017-08-28 164 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

回答