특정 메서드 실행 시간 ,종료 시간을 측정하고 싶을때 우리는 일반적으로 아래와 같은 식으로 작성했었다.
@Around("webLog()")
public Object 실행시간측정해보기(ProceedingJoinPoint joinPoint) throws Throwable {
long 시작시간 = System.currentTimeMillis();
long 종료시간 = System.currentTimeMillis();
webLog.setSpendTime((int) (종료시간 - 시작시간));
}
하지만 spring 에는 더 좋은 객체가 있어서 소개해본다. 바로 StopWatch 라는 요놈...
// StopWatch 하나 만들고
StopWatch sw = new StopWatch(" 샘플입니다.");
// 시간계산 시작
sw.start("임수수행1");
Thread.sleep(1000);
// 멈추고...
sw.stop();
System.out.printf("임수수행1-->소요시간:%d%s.\n", sw.getLastTaskTimeMillis(), "ms");
sw.start("임수수행2");
Thread.sleep(1100);
sw.stop();
System.out.printf("임수수행2-->소요시간:%d%s.\n", sw.getLastTaskTimeMillis(), "ms");
System.out.printf("임수수행건수:%s,소용총시간:%ss.\n", sw.getTaskCount(), sw.getTotalTimeSeconds());
sw.stop() 함수가 어떻게 되었는지 확인해보면
public void stop() throws IllegalStateException {
if (null == this.currentTaskName) {
throw new IllegalStateException("Can't stop StopWatch: it's not running");
}
final long lastTime = System.nanoTime() - this.startTimeNanos;
this.totalTimeNanos += lastTime;
this.lastTaskInfo = new TaskInfo(this.currentTaskName, lastTime);
if (null != this.taskList) {
this.taskList.add(this.lastTaskInfo);
}
++this.taskCount;
this.currentTaskName = null;
}
내부코드는 그냥 System.nanoTime() 함수를 사용한것. 사실 System.currentTimeMillis() 와 별다른 차이는 없어보인다.
찾아보니 Apache commons-lang3 의 StopWatch 라는 비슷한 놈도 있었다.
사용방식은 ...
StopWatch sw = StopWatch.createStarted();
Thread.sleep(1000);
System.out.printf("소용시간:%dms.\n", sw.getTime());
getTime() 외 아래 함수들도 있으니 참고 바란다.
// 시간계산 일시 멈춤
sw.suspend();
System.out.printf("시간계산 일시 멈춤:%dms.\n", sw.getTime());
// 시간계산 복구
sw.resume();
System.out.printf("시간계산 복구:%dms.\n", sw.getTime());
// 시간계산 종료
sw.stop();
System.out.printf("시간계산 종료:%dms.\n", sw.getTime());
// 시간계산 리셋
sw.reset();
System.out.printf("시간계산 리셋:%dms.\n", sw.getTime());
// 시간계산 시작
sw.start();
System.out.printf("시간계산 시작:%dms.\n", sw.getTime());
'Back-end > Spring&SpringBoot' 카테고리의 다른 글
Springboot email 전송기능구현 (0) | 2022.12.20 |
---|---|
Spring에서 자주는 주는 확장방식들 (0) | 2022.12.19 |
java 에서 불변의 컬렉션을 생성하는 방법 (0) | 2022.12.13 |
Stream -> List 로 전환하는 몇가지 방법? (0) | 2022.12.13 |
Stream.toList() vs Collectors.toList() 성능비교 (0) | 2022.12.13 |