`
xly_971223
  • 浏览: 1277773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用spring StopWatch计时

 
阅读更多
很多框架提供计时类 spring也不例外

记录下使用StopWatch的类

package cn.ceopen.zweb.common;

import java.io.IOException;
import java.text.NumberFormat;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.restlet.data.Request;
import org.springframework.util.StopWatch;
import org.springframework.util.StopWatch.TaskInfo;

/**
 * 把方法执行时间写日志文件
 * 
 * 用法:
 *  MethodTimeLogger first = new MethodTimeLogger("任务名称");  
        first.start("A");  
        Thread.sleep(200);  
        first.stop();  
        first.start("B");  
        Thread.sleep(200);  
        first.stop();  
        first.start("C");  
        Thread.sleep(120);  
        first.stop();  
        first.writeLog();  
 *
 * @author 徐良永
 * @created 2014年1月13日 上午10:52:25
 */
public class StopWatchLogger {
	private static final Log log = LogFactory.getLog(StopWatchLogger.class);
	
	private StopWatch clock;
	
	/**
	 * 任务名称
	 */
	private String taskName;
	

	/**
	 * 创建一个即时任务
	 */
	public StopWatchLogger(String taskName) {
		if(StringUtils.isBlank(taskName)){
			throw new NullPointerException();
		}
		this.taskName = taskName;
		clock = new StopWatch();
	}
	
	/**
	 * 开始计时
	 */
	public void start(Request request){
		StringBuilder sb = new StringBuilder(); 
		//输出请求数据
		sb.append(request.getResourceRef().getTargetRef().toString());
		sb.append("   " + request.getMethod().getName());
		sb.append("   ");
		
		if(request.getEntity() != null && !request.getEntity().isTransient()){ //isTransient 表示可重复读取  
			try {
				sb.append(request.getEntity().getText());
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
		}
		
		clock.start(sb.toString());
	}
	
	/**
	 * 开始一个子任务计时
	 * @param taskName: 任务名
	 */
	public void start(String subTaskName){
		clock.start(subTaskName);
	}
	
	/**
	 * 停止计时
	 */
	public void stop(){
		clock.stop();
	}
	
	/**
	 * 输出执行时间
	 */
	public void writeLog(){
		NumberFormat nf = NumberFormat.getNumberInstance();  
        nf.setMinimumIntegerDigits(5);  
        nf.setGroupingUsed(false); 
        
        log.info(">>>>  " + nf.format(clock.getTotalTimeMillis()) + "  " + taskName);
        
		for (TaskInfo task : clock.getTaskInfo()) {  
			StringBuilder sb = new StringBuilder(); 
            sb.append(nf.format(task.getTimeMillis())).append("  ");  
            sb.append(task.getTaskName());  
            log.info(sb);
        }  
	}

	
	public static void main(String[] args) throws InterruptedException{  
		StopWatchLogger first = new StopWatchLogger("test");  
        first.start("A");  
        Thread.sleep(200);  
        first.stop();  
        first.start("B");  
        Thread.sleep(200);  
        first.stop();  
        first.start("C");  
        Thread.sleep(120);  
        first.stop();  
       first.writeLog();  
          
    }  
	
}
分享到:
评论

相关推荐

    Spring计时器StopWatch使用示例

    Spring计时器StopWatch使用示例详解 Stopwatch是Spring框架提供的一个工具类,位于org.springframework.util包下,主要用于对程序部分代码进行计时(ms级别),适用于同步单线程代码块。在开发过程中,我们经常...

    Java计时新姿势StopWatch详解

    StopWatch的使用非常简单,只需要引入Spring核心包,并创建一个StopWatch对象,然后使用start()方法开始计时,stop()方法停止计时,最后使用prettyPrint()方法将计时结果输出。 StopWatch的优点在于它可以对多个...

    Java计时器StopWatch实现方法代码实例

    StopWatch类的实现方法可以分为三种:使用Spring包提供的计时器、使用Java自带的计时器和使用第三方库提供的计时器。 1. 使用Spring包提供的计时器 Spring框架提供了一个StopWatch类,该类可以用于测量程序执行的...

    StopWatch-源码.rar

    这个"StopWatch-源码.rar"文件很可能包含了一个实现StopWatch功能的Java源代码,我们可以从这个源码中学习到如何在Java中创建自己的计时器工具。 在Java中,`java.util.Timer`和`java.util.concurrent.TimeUnit`类...

    spring-data-hadoop-1.0.1.RELEASE.zip

    Stopwatch的使用非常直观,可以通过start()和stop()方法开启和结束计时,然后通过elapsed()方法获取已过去的时间,支持毫秒、秒、分钟等多种时间单位。 开源项目是软件发展的重要推动力,Spring Data Hadoop和Joda-...

    .NET/C# 使用Stopwatch测量运行时间

    您可能感兴趣的文章:Spring StopWatch使用实例详解Java计时新姿势StopWatch详解秒表计时器以及STOPWATCH(实例讲解)Javascript实现的StopWatch功能示例C#使用StopWatch获取程序毫秒级执行时间的方法

    Java高手笔记-工程师必须知道的事

    日志中需要注意StopWatch间隔计时的坑。解决方法是正确使用StopWatch和日志输出。 spring框架 spring框架中需要注意使⽤@EnableXx装载配置使⽤Conditional设计思想的坑。解决方法是正确配置spring框架的自动装配和...

    基于Java的源码-程序监控API Java Simon.zip

    例如,使用Spring AOP可以全局地监控所有指定的Service方法,而无需在每个方法内添加监控代码。 此外,Java Simon支持动态管理和配置,可以通过管理接口动态添加、删除或修改Simon实例,适应不同的运行时需求。...

    perf4j性能监控1

    - 如果你想自动地对方法进行计时,Perf4J 提供了 `@Profiled` 注解,可以与面向切面编程(AOP)框架如 AspectJ 或 Spring AOP 结合使用。这样,你可以将性能监控应用到特定的方法上,而无需手动创建和管理 `...

    java代码,测试排序所用时间

    使用`@Test`注解的方法中,可以结合`StopWatch`类(来自`org.springframework.util.StopWatch`)来记录时间。 6. **微基准测试**:如果关注的是非常小规模的数据或特定操作的性能,可能需要使用微基准测试。微基准...

    涨姿势:SpringBoot2.x启动全过程源码分析

    首先,启动过程始于创建并启动计时监控类StopWatch。StopWatch用于记录启动过程中的各个阶段耗时,帮助我们了解性能瓶颈。它记录了当前任务的名称和启动时间,以便于后期分析。 接着,SpringApplication初始化应用...

    Measurement

    在Java 9及更高版本中,`java.time`包提供了更高级的计时工具,如`Stopwatch`类(尽管不是标准库的一部分,但可以通过第三方库如Guava获取)。这些工具可以用来度量代码块的执行时间,并提供更精细的控制和结果分析...

Global site tag (gtag.js) - Google Analytics