Spring MVC拦截器实现性能监控的功能代码

  

利用Spring MVC的拦截器实现个简易的性能监控,计算一下每个url的执行时间。

  

在preHandle方法中记录当前的时间戳到线程局部变量里,然后在afterCompletion方法中,用当前的时间戳剪掉线程局部变量里的时间戳得出个运行时间,并记录到日志里。

  

这只是个简易的性能监控,如果想长期正式的监控性能,请选择其它成熟的产品。

  

拦截器         进口javax.servlet.http.HttpServletRequest;   进口javax.servlet.http.HttpServletResponse;      进口org.slf4j.Logger;   进口org.slf4j.LoggerFactory;   进口org.springframework.core.NamedThreadLocal;   进口org.springframework.web.servlet.HandlerInterceptor;   进口org.springframework.web.servlet.ModelAndView;         公共类PerformanceInterceptor实现HandlerInterceptor {      私人最终静态日志记录器=LoggerFactory.getLogger (PerformanceInterceptor.class);      私人NamedThreadLocalstartTimeThreadLocal=new NamedThreadLocal(“性能”);      @Override   公共布尔preHandle (HttpServletRequest请求,HttpServletResponse响应对象处理程序)   抛出异常{   startTimeThreadLocal.set (System.currentTimeMillis ());   返回true;   }      @Override   公共空白postHandle (HttpServletRequest请求,HttpServletResponse响应对象处理程序,   {ModelAndView ModelAndView)抛出异常   返回;   }      @Override   公共空间afterCompletion (HttpServletRequest请求,HttpServletResponse响应、对象处理程序异常交货)   抛出异常{   长currentTime=System.currentTimeMillis ();   长executeTime=currentTime - startTimeThreadLocal.get ();   LOGGER.info (“uri:{}执行了{}毫秒”,request.getRequestURI (), executeTime);   }      }   之前      

这里的是NamedThreadLocal没啥神器的,源码如下:

        包org.springframework.core;      进口org.springframework.util.Assert;      公开课NamedThreadLocal扩展ThreadLocal{      私人最终字符串名称;      公共NamedThreadLocal(字符串名称){   断言。hasText(名称,名称不能是空的);   this.name=名称;   }      @Override   公共字符串toString () {   返回this.name;   }      }   之前      

定义完拦截,注册即可。

        进口并不知道;      进口org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;   进口org.springframework.boot.web.filter.OrderedCharacterEncodingFilter;   进口org.springframework.context.annotation.Bean;   进口org.springframework.context.annotation.Configuration;   进口org.springframework.http.converter.HttpMessageConverter;   进口org.springframework.web.filter.CharacterEncodingFilter;   进口org.springframework.web.servlet.config.annotation.InterceptorRegistry;   进口org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;   进口org.springframework.web.servlet.config.annotation.ViewControllerRegistry;   进口org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;      进口com.vnierlai.scm.webapp.interceptor.PerformanceInterceptor;      @ configuration   公开课WebMvcConfigurer延伸WebMvcConfigurerAdapter {      @ bean   @ConditionalOnMissingBean (CharacterEncodingFilter.class)   公共CharacterEncodingFilter CharacterEncodingFilter () {   CharacterEncodingFilter过滤器=new OrderedCharacterEncodingFilter ();   filter.setEncoding (“utf - 8”);   返回过滤器;   }      @Override   公共空间addInterceptors (InterceptorRegistry注册表){   注册表。addInterceptor(新PerformanceInterceptor ()) .addPathPatterns (“/* *”);   super.addInterceptors(注册表);   }      @Override   公共空间addResourceHandlers (ResourceHandlerRegistry注册表){   registry.addResourceHandler(“/webjars/* *”).addResourceLocations(“类路径:/meta - inf/资源/webjars/?;//registry.addResourceHandler .addResourceLocations(“/资源/* *”)(“/资源/?;   }      }   之前      

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Spring MVC拦截器实现性能监控的功能代码