Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跟踪springboot中API调用的响应时间_Spring_Api - Fatal编程技术网

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

跟踪springboot中API调用的响应时间,spring,api,Spring,Api,我希望跟踪API调用的响应时间。 然后,我想在一张图表上绘制调用(GET、PUT、POST DELETE)的响应时间,以比较时间差 这是我目前正在做的,以找到一个GET呼叫的响应时间,但我不太确定它是否正确 @RequestMapping(value="/Students", method = RequestMethod.GET) public ResponseEntity<List<Students>> getStudents() { l

我希望跟踪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);
    }
@RequestMapping(value=“/Students”,method=RequestMethod.GET)
公众反应学生(英文)
{
long beginTime=System.currentTimeMillis();
List students=(List)repository.findAll();
if(students.isEmpty())
{
返回新的响应属性(HttpStatus.NO_内容);
}
长响应时间=System.currentTimeMillis()-beginTime;
logger.info(“呼叫的响应时间为”+响应时间);
返回新的ResponseEntity(学生,HttpStatus.OK);
}
我相信我是在将数据返回到客户端之前返回响应时间的,这就是本文的重点,但我不能将其放在return语句之后,因为这是无法访问的代码


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

您可以使用springboot的Around建议,并在建议中记录通话时间。它的工作方式是,一旦向控制器发出一个呼叫,Around通知就会截获它并启动一个计时器(记录所用的时间)。根据建议,我们使用jointPoint.procedure()方法处理主控制器。控制器返回值后,可以记录计时器值。返回对象

以下是示例代码:

in 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。你可以走了

希望这有帮助


您可以参考以获取完整的解释。

可能重复使用弹簧启动执行器,它将记录这方面的指标。您可以将其流式传输到Grafana(当然还有其他选项)。Hi@M.Deinum,感谢您的回复。从spring导出度量的最佳方法是什么,这样我就可以在grafana上可视化它?我在将其导出到XDB时遇到了问题,我不确定这是否是最好的方法。请查看Spring Boot提供的一个导出程序(也请查看)