关闭服务 - 组合HandlerInterceptor和ServletContextListener

时间:2017-08-03 17:15:40

标签: java spring spring-mvc tomcat servlets

我正在努力优雅地关闭服务,为此我们需要在启动关闭之前检查所有当前请求是否已完成。这是我的关机处理程序:

@Service
public class ShutdownHandler implements HandlerInterceptor {
    private int inflightRequests;
    public void handleShutdown() {
        if(inflightRequests == 0) {
            doSomething();
        }
    }
    @Override
    public boolean preHandle(...) throws Exception {
        inflightRequests++;
        return false;
    }

    @Override
    public void afterCompletion(...) {
        inflightRequests--;
    }
}

如何在我的上下文侦听器的contextDestroyed()方法中添加对handleShutdown()的调用,以及将其添加为处理程序拦截器?有没有办法使用@Autowired?

1 个答案:

答案 0 :(得分:0)

将InflightRequests更改为静态,在servlet上下文被销毁时调用新的关闭处理程序并调用shutdown方法。总的来说,有两个关闭处理程序的实例,但似乎有效。