最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC Interceptor 實現(xiàn)性能監(jiān)控的功能代碼

 更新時間:2017年09月04日 11:10:24   作者:程序員筆記  
本篇文章主要介紹了Spring MVC Interceptor 實現(xiàn)性能監(jiān)控的功能代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

利用Spring MVC 的 Interceptor 實現(xiàn)個簡易的性能監(jiān)控,計算一下每個url的執(zhí)行時間。

在 preHandle 方法中記錄當(dāng)前的時間戳到線程局部變量里,然后在afterCompletion方法中,用當(dāng)前的時間戳剪掉線程局部變量里的時間戳得出個運行時間,并記錄到log里。

這只是個簡易的性能監(jiān)控,如果想長期正式的監(jiān)控性能,請選擇其它成熟的產(chǎn)品。

Interceptor

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.NamedThreadLocal;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
 
public class PerformanceInterceptor implements HandlerInterceptor {
 
  private final static Logger LOGGER = LoggerFactory.getLogger(PerformanceInterceptor.class);
 
  private NamedThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("performance");
 
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    startTimeThreadLocal.set(System.currentTimeMillis());
    return true;
  }
 
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
      ModelAndView modelAndView) throws Exception {
    return;
  }
 
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
      throws Exception {
    long currentTime = System.currentTimeMillis();
    long executeTime = currentTime - startTimeThreadLocal.get();
    LOGGER.info("uri:{} 執(zhí)行了 {} 毫秒", request.getRequestURI(), executeTime);
  }
 
}

這里的是NamedThreadLocal沒啥神器的,源碼如下:

package org.springframework.core;
 
import org.springframework.util.Assert;
 
public class NamedThreadLocal<T> extends ThreadLocal<T> {
 
  private final String name;
 
  public NamedThreadLocal(String name) {
    Assert.hasText(name, "Name must not be empty");
    this.name = name;
  }
 
  @Override
  public String toString() {
    return this.name;
  }
 
}

定義完Interceptor,注冊即可。

import java.util.List;
 
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.web.filter.OrderedCharacterEncodingFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
import com.vnierlai.scm.webapp.interceptor.PerformanceInterceptor;
 
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
 
  @Bean
  @ConditionalOnMissingBean(CharacterEncodingFilter.class)
  public CharacterEncodingFilter characterEncodingFilter() {
    CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    return filter;
  }
 
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new PerformanceInterceptor()).addPathPatterns("/**");
    super.addInterceptors(registry);
  }
 
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    // registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
  }
 
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 關(guān)于Spring工廠方法注入屬性方式

    關(guān)于Spring工廠方法注入屬性方式

    這篇文章主要介紹了關(guān)于Spring工廠方法注入屬性方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringSecurity數(shù)據(jù)庫進行認(rèn)證和授權(quán)的使用

    SpringSecurity數(shù)據(jù)庫進行認(rèn)證和授權(quán)的使用

    本文主要介紹了用戶的賬號、密碼以及角色信息在數(shù)據(jù)庫中的認(rèn)證和授權(quán),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot項目讀取外置logback配置文件的問題及解決

    SpringBoot項目讀取外置logback配置文件的問題及解決

    SpringBoot項目讀取外置logback配置文件的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Mybatis如何通過出入Map參數(shù)作為條件進行查詢

    Mybatis如何通過出入Map參數(shù)作為條件進行查詢

    這篇文章主要介紹了Mybatis如何通過出入Map參數(shù)作為條件進行查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用Java發(fā)送帶附件的附件的示例

    使用Java發(fā)送帶附件的附件的示例

    這篇文章主要介紹了使用Java發(fā)送帶附件的附件的方法,使用到了JavaMail這個API,需要的朋友可以參考下
    2015-11-11
  • springboot 自定義權(quán)限標(biāo)簽(tld),在freemarker引用操作

    springboot 自定義權(quán)限標(biāo)簽(tld),在freemarker引用操作

    這篇文章主要介紹了springboot 自定義權(quán)限標(biāo)簽(tld),在freemarker引用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java 實現(xiàn)二叉搜索樹的查找、插入、刪除、遍歷

    Java 實現(xiàn)二叉搜索樹的查找、插入、刪除、遍歷

    本文主要介紹了Java實現(xiàn)二叉搜索樹的查找、插入、刪除、遍歷等內(nèi)容。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Spring事物基礎(chǔ)知識及AOP相關(guān)陷阱分析

    Spring事物基礎(chǔ)知識及AOP相關(guān)陷阱分析

    這篇文章主要介紹了Spring事物基礎(chǔ)知識及AOP相關(guān)陷阱,在平時的實際開發(fā)中經(jīng)常會遇到,只有深入了解了其中的原理,才會在工作中能夠有效應(yīng)對
    2021-09-09
  • @NotEmpty、@NotBlank、@NotNull的區(qū)別

    @NotEmpty、@NotBlank、@NotNull的區(qū)別

    這篇文章主要介紹了@NotEmpty、@NotBlank、@NotNull的區(qū)別,需要的朋友可以參考下
    2016-09-09
  • 最新評論

    乃东县| 文安县| 夏河县| 连云港市| 皮山县| 上饶县| 正阳县| 武城县| 景宁| 宿松县| 垣曲县| 宣化县| 延边| 泾阳县| 永德县| 尤溪县| 内乡县| 泽州县| 中江县| 五常市| 亚东县| 周宁县| 乌兰县| 平和县| 新营市| 汕头市| 时尚| 德安县| 麻江县| 奈曼旗| 绵阳市| 沧源| 柘荣县| 平江县| 沂源县| 浦县| 桦南县| 岳阳县| 扎囊县| 民丰县| 河间市|