아키텍처와 함께

블로그 이미지
by gregorio
  • Total hit
  • Today hit
  • Yesterday hit

Spring Framework에서 AOP와 Annotation을 이용하여 Elapsed time을 Log에 생성하는 예제이다.


먼저 StopWatch Annotation 생성한다.


■ StopWatch.java


import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;


@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.METHOD})

public @interface StopWatch {

}



StopWatch Annotation은 Method Level에 적용하기 때문에 @Target을 METHOD로 정의하였으며, Runtime시에 적용한다.



다음은 메소드의 수행시간을 로그에 기록하기 위해 AOP 생성한다.


■ LoggingAspect.java


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.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import org.springframework.util.StopWatch;


@Aspect

@Component

public class LoggingAspect {


@Around("@annotation(sehati.bi.annotation.StopWatch)")

public Object stopWatch(ProceedingJoinPoint joinPoint) throws Throwable {

StopWatch stopWatch = new StopWatch();

Object proceed = null;

String className = joinPoint.getSignature().getName();

try {

stopWatch.start();

proceed = joinPoint.proceed();

}

finally {

stopWatch.stop();

LOGGER.info("{} elapsed time :: {}", className, stopWatch.getTotalTimeMillis());

}

return proceed;

}


}




@Aspect Annotation을 이용하여 AOP 를 구현한다.

@Around Advice을 적용 시 Point Cut을 StopWatch Annotation을 사용한 모든 Method는 stopWatch 메소드에 의해 호출된다.



다음은 @StopWatch Annotation 적용 예제이다.


  @RequestMapping(value = "/bi/mainpage.do")

@StopWatch

public String mainPageView(HttpServletRequest request) throws Exception {

LOGGER.info("Called :: {}", request.getRequestURL());

return "main";

}


mainPageView를 @StopWatch Annotation을 적용해 로그에 Elasped time이 기록된다.


AND

ARTICLE CATEGORY

분류 전체보기 (56)
Spring Framrwork (33)
Linux (1)
APM (1)
Java (8)
python (0)
ant (1)
chart (1)
OS (1)
tomcat (1)
apache (1)
database (0)

RECENT ARTICLE

RECENT COMMENT

CALENDAR

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

ARCHIVE

LINK