跟踪springboot中API调用的响应时间

时间:2017-10-29 00:12:16

标签: spring api

我希望跟踪API调用的响应时间。 然后我想在图表上绘制调用的响应时间(GET,PUT,POST DELETE)以比较时间差异。

这是我目前正在做的找到GET呼叫的响应时间,但我不太确定它是否正确。

@RequestMapping(value="/Students", method = RequestMethod.GET)
    public ResponseEntity<List<Students>> getStudents()
    {
        long beginTime = System.currentTimeMillis();
        List<Students> students =  (List<Students>) repository.findAll();
        if(students.isEmpty())
        {
            return new ResponseEntity(HttpStatus.NO_CONTENT);
        }
        long responseTime = System.currentTimeMillis() - beginTime;
        logger.info("Response time for the call was "+responseTime);
        return new ResponseEntity(students, HttpStatus.OK);
    }

我相信我在将数据实际返回到客户端之前返回响应时间,这是完整的一点,但是我无法将它放在return语句之后,因为它将是无法访问的代码。

有没有更好的方法来尝试跟踪通话时间?

1 个答案:

答案 0 :(得分:-1)

您可以使用springboot的周围建议,并在建议中记录时间。它的工作方式是一旦调用控制器,周围建议拦截它并启动一个计时器(记录所用的时间)。从建议我们使用jointPoint.proceed()方法进入主控制器。一旦控制器返回该值,您就可以记录定时器值。返回Object。

以下是示例代码:

build.grale中的

包括

 compile("org.aspectj:aspectjweaver:1.8.8")

创建一个组件类并放置@Aspect

@Component
@Aspect
public class advice{

@Around(("@annotation(logger)")
   public Object loggerAspect(ProceedingJoinPoint joinPoint){
    // start the Timer
    Object object = jointPoint.proceed();
    // log the timer value
    return object;
  }
}

在控制器方法中添加注释@logger。你已准备好出发。

希望这有帮助。

您可以参考link获取完整说明。