这可能是一个简单的解决方案,但我无法做到这一点。我需要记录我的请求在SpringBoot Rest API的整体执行时间。请求总是进入MainController
总是可以退出两个地方-
1.主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";
}
2条答案
按热度按时间dluptydi1#
您可以使用简单的筛选器。
rsl1atfo2#
我已经用注解和建议解决了这个问题。
首先需要添加这些依赖项
Boot
然后创建一个注解,如下所示
然后在通知类中编写时间测量逻辑
现在在rest控制器上使用注解TimeTracker,如下所示
输出将如下所示