利用springMVC的interceptor实现页面性能监控(Filter亦可)

   调优第一步,找出耗时比较长的页面进行优化。利用interceptor能轻易搞定。interceptor提供了preHandle和postHandle以及afterCompletion三个方法。preHandle调用controller具体方法之前调用,postHandle完成具体方法之后调用,afterCompletion完成对页面的render以后调用,至此整个页面渲染完成。也就是说我们在preHandle记录开始的时间,在afterCompletion记录结束的时间,就可或者整个页面生成的时间。Spring自带StopWatch工具类来实现时间跟踪,关键一点interceptor不是线程安全的。我们需要借助threadlocal来实现线程安全。

@Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        if(usePerformance){
        	StopWatch stopWatch = new StopWatch(handler.toString());
            stopWatchLocal.set(stopWatch);
            stopWatch.start(handler.toString());
        }
        
        return true;
    }


 @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    	if(usePerformance){
    		StopWatch stopWatch = stopWatchLocal.get();
            stopWatch.stop();
            String currentPath = request.getRequestURI();
            String queryString  = request.getQueryString();
            queryString = queryString == null ? "":"?" + queryString;
            log.info("access url path:" + currentPath + queryString +  " |time:" + stopWatch.getTotalTimeMillis());
            stopWatchLocal.set(null);
    	}
        
    }

 

呵呵,如果你没有使用springMVC可以使用filter来完成


stopWatch.start();

doFilterChain();
stopWatch.stop();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值