Spring Boot Elapsed Time
Spring Boot에서 Elapsed Time (API 처리 시간)을 Json으로 포함하여 리턴하고 싶다.
Result 예시
{ "data": null, "success": true, "elapsedTime": 304 }
이를 위해서 Aspect를 사용한다.
import java.util.Map; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /* * Body의 ElapsedTime을 나타내기 위한 Aspect */ @Aspect @Component public class ElapsedTimeAspect { @Pointcut("within(io.xxxxxx.yyyyy.controller.*)") private void pointcutMethod() { } @Around("pointcutMethod()") public Object elapsedTime(ProceedingJoinPoint joinPoint) throws Throwable { Long startTime = System.nanoTime(); Object object = joinPoint.proceed(); if(object instanceof Map){ Long endTime = System.nanoTime(); Map
resultMap = (Map ) object; resultMap.put("elapsedTime", (endTime - startTime)/1000000); return resultMap; } return object; } }
Syntax Highlighter로 위의 코드들이 표현이 되지 않는 경우가 있어서 사진도 추가해 놓았다.
위의 예시를 사용하기 위해서는 Controller에서 Map<String, Object>로 리턴해야 한다.
먼저 joinPoint.proceed를 실행하기 전에 startTime을 작성하고 joinPoint.proceed를 진행한 후에 elapsedTime을 계산하여 resultMap에 추가한다.
이렇게 Json ResponseBody에 ElapsedTime을 넣어주는 방법 외에 Header을 사용하여 그 안에 elapsed-time을 넣어주는 방법도 있다.
'프로그래밍 > JAVA 프로그래밍' 카테고리의 다른 글
[JAVA] Spring Boot Swagger Header 설정 (0) | 2018.03.08 |
---|---|
[JAVA] Spring Boot Swagger 설정 (0) | 2018.02.26 |