java 使用拦截器统计每个http请求的响应时间

以spring boot为例,注意拦截器是单例 ,因此不要使用成员变量记录时间,而是通过setAttribute,getAttribute来传送时间。

@Configuration
public class BootWebAppConfigurer extends WebMvcConfigurerAdapter {
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new BootInterceptor()).addPathPatterns("/**");
		super.addInterceptors(registry);
	}
}

/***
 * 拦截器,单例
 */
public class BootInterceptor implements HandlerInterceptor {
	public final AtomicLong _count = new AtomicLong();// 计数器

	// 1
	public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) {
		long begin_nao_time = System.nanoTime();
		String realIp = HttpHeadTool.getRealIpAddr(req);
		req.setAttribute("p_real_ip", realIp);
		req.setAttribute("begin_nao_time", begin_nao_time);
		return true;
	}

	/*3*/
	public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object arg2, Exception arg3)
			throws Exception {
		long begin_nao_time = (Long) req.getAttribute("begin_nao_time");
		String real_ip = (String) req.getAttribute("p_real_ip");
		long interval = System.nanoTime() - begin_nao_time;
		String uri = req.getRequestURI();
		StatsManager.inst().statsUri(uri, interval);//统计费时
	}

	/* 2 */
	public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2, ModelAndView arg3)throws Exception {}
}

这个方法得到的结果与阿里巴巴的druid统计的时间略少10%多一点儿

统计结果如图:


今天根据URI费时分析看出访问微信接口获取openid和token,以及头像,昵称这俩接口比较耗时,因此在前端改为获取过信息后放在本地存储,提高了约0.2秒的加载时间

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值