使用两种方式,实现拦截http请求的后台运行时间。
废话不多说直接上代码
/**
* Http请求时间统计
* 拦截所有请求
*/
public class HttpRquestTimeInterceptor extends HandlerInterceptorAdapter {
ThreadLocal<Long> localThread = new ThreadLocal<Long>();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//线程方式
localThread.set(System.currentTimeMillis());
//request方式
request.setAttribute("_startTime", System.currentTimeMillis());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
Long endTime = System.currentTimeMillis();
System.out.println(request.getServletPath() + " >> http请求结束线程:" + (endTime - localThread.get()));
Long startTime = (Long)request.getAttribute("_startTime");
System.out.println(request.getServletPath() + " >> http请求结束:" + (endTime - startTime));
}
}
Spring 配置
<mvc:interceptors>
<!-- Http请求统计 -->
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="HttpRquestTimeInterceptor" ></bean>
</mvc:interceptor>
</mvc:interceptors>
如果你有新的办法,请赐教