国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java監測方法運行時間/效率方法

2019-11-14 21:55:02
字體:
來源:轉載
供稿:網友
java監測方法運行時間/效率方法

前言:

  這周在寫一個小項目,雖然小但是是純調外部接口的,調完了接口還不停的循環接口返回的數據(已轉換JSONArray),然后再判斷值,再做不同處理,關鍵是數據量還比較大,這剛做完還沒開始上線,測試也還沒開始測呢,就想著自己先看看每個方法運行效率,省的數據大了項目掛掉(循環判斷好多,有時還有2個for嵌套循環),就是純粹在時間上進行監測,沒有內存和cpu的監控。

  主要利用了SPRing AOP 技術,對想要統計的方法進行橫切處理,方法執行前開始計時,方法執行后停止計時,得到計時方法就是該方法本次消耗時間。

步驟:

  • 首先編寫自己的Interceptor類來實現MethodInterceptor類,來用于切入方法,運行計時代碼
  • Spring AOP 的xml配置,配置需要監測的方法和切入方法(自定義的Interceptor)

java代碼:

package com.cplatform.tencent.task;import java.util.HashMap;import java.util.Map;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.apache.commons.lang.time.StopWatch;/** * 方法運行時間測試 * @author liuyt * @date   2014-11-16 下午3:39:08 * bolgs   http://m.survivalescaperooms.com/liuyitian/ */public class MethodTimeActive implements MethodInterceptor {    /**     * 自定義map集合,key:方法名,value:[0:運行次數,1:總時間]     */    public static Map<String,Long[]> methodTest = new HashMap<String, Long[]>();    /**     * 攔截要執行的方法     */    public Object invoke(MethodInvocation invocation) throws Throwable {        // 創建一個計時器        StopWatch watch = new StopWatch();        // 計時器開始        watch.start();         // 執行方法        Object object = invocation.proceed();        // 計時器停止        watch.stop();        // 方法名稱        String methodName = invocation.getMethod().getName();        // 獲取計時器計時時間        Long time = watch.getTime();        if(methodTest.containsKey(methodName)) {            Long[] x = methodTest.get(methodName);            x[0]++;            x[1] += time;        }else{            methodTest.put(methodName, new Long[] {1L,time});        }        return object;    }    }

XML配置:

<!-- 日志記錄某個類中方法花費時間aop -->      <aop:config>          <!-- Spring 2.0 可以用 aspectJ 的語法定義 Pointcut,這里自定義要攔截方法的包所在 -->          <aop:advisor id="methodTimeLog" advice-ref="methodTimeAdvice" pointcut="execution(* com.cplatform.tencent.sync..*.*(..))"/>          <aop:advisor id="methodTimeLog2" advice-ref="methodTimeAdvice" pointcut="execution(* com.cplatform.tencent.utils..*.*(..))"/>      </aop:config>      <bean id="methodTimeAdvice" class="com.cplatform.tencent.task.MethodTimeActive"/>   

  使用AOP面向切面技術時,XML配置里面千萬別忽略了以下配置:


TEST:

package test;import java.util.Map;import java.util.Set;import org.junit.After;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ActiveProfiles;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.cplatform.tencent.sync.PersistenceTicketService;import com.cplatform.tencent.task.MethodTimeActive;import com.cplatform.tencent.utils.AppConfig;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:spring-configuration/*.xml"})@ActiveProfiles("production")public class CopyOfDBTest {        @Autowired    private AppConfig appConfig;    // 這是我項目里用到的  可忽略    @Autowired    private PersistenceTicketService persistenceTicketService;        // 測試某個方法,這個方法內部調用了很多業務處理方法    @Test    public void testInsertOrUpdate() {        persistenceTicketService.insertOrUpdate(appConfig.getTicketCityIds(), appConfig.getAgentId());    }        // 測試方法運行完畢后,取出定義的Map集合,取出數據    @After    public void testMethodActive() {        Map<String, Long[]> map = MethodTimeActive.methodTest;        Set<String> set = map.keySet();        Long[] x = null;        for(String s : set) {            x = map.get(s);            System.out.println(s+":"+x[0]+"次,"+x[1]+"毫秒");        }    }}

  上面用到的是Spring和junit對WEB方法進行測試,具體可以參照SpringJunit4 進行單元測試


console輸出:


  其實也不難,大家可能也都會,獻下小丑了,歡迎拍磚。

                        寫作不易,難免有疏漏和錯誤,還請慷慨指正,不錯請推薦

   ps:歡迎轉載,轉載請注明出處:http://m.survivalescaperooms.com/liuyitian/p/4101531.html


                                         每天多學一點點 代碼少敲一點點


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 朝阳县| 江安县| 措勤县| 清流县| 万年县| 凌海市| 岳西县| 正定县| 大余县| 左权县| 湖口县| 潮州市| 长葛市| 琼海市| 米易县| 黎平县| 丹寨县| 胶南市| 额尔古纳市| 道真| 姚安县| 平乐县| 满城县| 竹北市| 双流县| 墨竹工卡县| 清新县| 察雅县| 高陵县| 博湖县| 湘阴县| 喜德县| 西昌市| 惠来县| 蒙城县| 鄂尔多斯市| 广州市| 肥城市| 天等县| 禄丰县| 隆林|