刘一天@认真是一种态度 使劲的浪费,用力的后悔。 java监测方法运行时间/效率方法
来源:互联网 发布:烟台大学官网网络教学 编辑:程序博客网 时间:2024/05/21 17:58
利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次消耗时间。
步骤:
- 首先编写自己的Interceptor类来实现MethodInterceptor类,来用于切入方法,运行计时代码
- Spring AOP 的XML配置,配置需要监测的方法和切入方法(自定义的Interceptor)
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://www.cnblogs.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; } }
<!-- 日志记录某个类中方法花费时间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配置里面千万别忽略了以下配置:
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输出:
0 0
- 刘一天@认真是一种态度 使劲的浪费,用力的后悔。 java监测方法运行时间/效率方法
- 方法选不对,时间全浪费。使用NSDataDetector提高你的编码效率
- 一种CAN优先级的监测方法
- shell中记录运行时间的一种方法
- 半饱是一种生活的的态度
- 优化时间效率的方法
- 工作的方法、态度
- 4个能使你停止浪费时间的方法
- 4个能使你停止浪费时间的方法
- 检测JAVA程序的运行时间方法
- 一种不断循环监测某一事件的方法
- 在Java中用两种方法打印当前的时间,第一种方法是格式化法,第二种方法是日历法。
- Java中常用的一种时间格式的转换方法
- 世界上最浪费时间的是什么事?
- 最浪费不起的是时间.
- 课表是合理的浪费时间
- 浏览者不需要在这个上面浪费时间,net一些问题解决方法--这是自己写的
- 浪费的一天
- Fragment中adapter刷新无效的解决办法
- android实现socket端口通信demo
- Android FlexboxLayout的简单了解以及使用
- 【C--step by step①】链表
- Linux C++程序解决文件句柄(包括socket句柄等)耗尽问题
- 刘一天@认真是一种态度 使劲的浪费,用力的后悔。 java监测方法运行时间/效率方法
- 有向图强连通分量 Tarjan算法
- 【bzoj2500】【幸福的道路】【树形dp+单调队列】
- Javascript模块化编程(二):AMD规范
- android framwork 分析之binder
- 最常用的Eclipse快捷键
- linux shell中怎样批量修改文件名为 文件夹_文件名
- Layer2-wan-pppoe
- uboot的relocation原理详细分析