Это может быть простое решение, но я не могу это сделать.Мне нужно записать общее время выполнения моего запроса в SpringBoot Rest API.Запрос всегда входит в MainController
всегда и может выходить из двух мест:
- Main
Restcontroller
тот же метод или ExceptionHandlerController
метод обработчика
Я создал одну пользовательскую аннотацию и внедрил ее в оба основных метода Controller
и ExceptionController
и получил время, затраченное на отдельные методы.Так вот в чем проблема.Мне нужно добавить эти индивидуальные времена, чтобы вычислить общее время, которое я не хочу.
Есть ли какой-либо другой способ легко зарегистрировать эту информацию.
Класс аспектов:
@Aspect
@Component
public class PointsAspect {
private final static Logger logger = LoggerFactory.getLogger(PointsAspect.class);
@Around("@annotation(annotation)")
public Object logMethod(final ProceedingJoinPoint proceedingJoinPoint, final LogAround annotation)
throws Throwable {
final long start = System.currentTimeMillis();
Object obj;
try {
logger.debug("Starting...! Method Name - " +proceedingJoinPoint.getSignature().getName());
obj = proceedingJoinPoint.proceed();
} finally {
logger.debug("Exiting...! Method Name - " +proceedingJoinPoint.getSignature().getName() +"Execution Time in Milliseconds:> "+ String.valueOf(System.currentTimeMillis()-start));
}
return obj;
}
}
Маркерный интерфейс:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAround {
}
И вот как я его впрыскиваю:
**ExceptionHandlerController.java**
@LogAround
@ExceptionHandler(HttpMessageNotReadableException.class)
public GenericFailureResponse missingRequestBodyException(HttpServletResponse response,
HttpServletRequest request, Exception ex) throws IOException {
GenericFailureResponse failureResponse = new GenericFailureResponse();
//TODO: exception logic
return failureResponse;
}
**MainController.java**
@LogAround
public String getTotalPoints(@RequestParam(required=true) long memberNo,
HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
//TODO : some logic
return "something";
}