很多框架提供计时类 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使用示例详解 Stopwatch是Spring框架提供的一个工具类,位于org.springframework.util包下,主要用于对程序部分代码进行计时(ms级别),适用于同步单线程代码块。在开发过程中,我们经常...
StopWatch的使用非常简单,只需要引入Spring核心包,并创建一个StopWatch对象,然后使用start()方法开始计时,stop()方法停止计时,最后使用prettyPrint()方法将计时结果输出。 StopWatch的优点在于它可以对多个...
StopWatch类的实现方法可以分为三种:使用Spring包提供的计时器、使用Java自带的计时器和使用第三方库提供的计时器。 1. 使用Spring包提供的计时器 Spring框架提供了一个StopWatch类,该类可以用于测量程序执行的...
这个"StopWatch-源码.rar"文件很可能包含了一个实现StopWatch功能的Java源代码,我们可以从这个源码中学习到如何在Java中创建自己的计时器工具。 在Java中,`java.util.Timer`和`java.util.concurrent.TimeUnit`类...
Stopwatch的使用非常直观,可以通过start()和stop()方法开启和结束计时,然后通过elapsed()方法获取已过去的时间,支持毫秒、秒、分钟等多种时间单位。 开源项目是软件发展的重要推动力,Spring Data Hadoop和Joda-...
您可能感兴趣的文章:Spring StopWatch使用实例详解Java计时新姿势StopWatch详解秒表计时器以及STOPWATCH(实例讲解)Javascript实现的StopWatch功能示例C#使用StopWatch获取程序毫秒级执行时间的方法
日志中需要注意StopWatch间隔计时的坑。解决方法是正确使用StopWatch和日志输出。 spring框架 spring框架中需要注意使⽤@EnableXx装载配置使⽤Conditional设计思想的坑。解决方法是正确配置spring框架的自动装配和...
例如,使用Spring AOP可以全局地监控所有指定的Service方法,而无需在每个方法内添加监控代码。 此外,Java Simon支持动态管理和配置,可以通过管理接口动态添加、删除或修改Simon实例,适应不同的运行时需求。...
- 如果你想自动地对方法进行计时,Perf4J 提供了 `@Profiled` 注解,可以与面向切面编程(AOP)框架如 AspectJ 或 Spring AOP 结合使用。这样,你可以将性能监控应用到特定的方法上,而无需手动创建和管理 `...
使用`@Test`注解的方法中,可以结合`StopWatch`类(来自`org.springframework.util.StopWatch`)来记录时间。 6. **微基准测试**:如果关注的是非常小规模的数据或特定操作的性能,可能需要使用微基准测试。微基准...
首先,启动过程始于创建并启动计时监控类StopWatch。StopWatch用于记录启动过程中的各个阶段耗时,帮助我们了解性能瓶颈。它记录了当前任务的名称和启动时间,以便于后期分析。 接着,SpringApplication初始化应用...
在Java 9及更高版本中,`java.time`包提供了更高级的计时工具,如`Stopwatch`类(尽管不是标准库的一部分,但可以通过第三方库如Guava获取)。这些工具可以用来度量代码块的执行时间,并提供更精细的控制和结果分析...