利用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拦截器实现性能监控的功能代码