当前位置: 首页 > 知识库问答 >
问题:

计算所有Spring控制器执行时间[关闭]

常波鸿
2023-03-14

如何计算所有Spring控制器的Spring控制器执行时间?假设我的应用程序中有200个Spring REST控制器,我如何计算每个控制器的执行时间并将时间保存在数据库中?

共有2个答案

戈巴英
2023-03-14

可以使用Aspect将此行为添加到应用程序中。

@Aspect 
@Component
@Slf4j
public class RequestLogAspect {

  @Autowired DurationRepository repo;
  ... 
  
  @Around("@annotation(org.springframework.web.bind.annotation.RequestMapping) 
           && execution(public * *(..))"
  )
  public Object log(final ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
            .currentRequestAttributes())
            .getRequest();
  
    long start = System.currentTimeMillis();

    Object value;

    try {
        value = proceedingJoinPoint.proceed();
    } catch (Throwable throwable) {
        throw throwable;
    } finally {
        long duration = System.currentTimeMillis() - start;

        log.info("{} {} from {} took {} ms",
                request.getMethod(), request.getRequestURI(),
                request.getRemoteAddr(), duration);
        // use repo and the information above to persist data
    }

    return value;
  }
}

来自本教程的源代码。

微生智刚
2023-03-14

编写ServletHttpFilter或Spring MVCHandlerInterceptor

有关HandlerInterceptor,请参阅Spring文档。

另请参见Spring MVC中拦截器和过滤器之间的区别。

 类似资料:
  • 计算一个函数执行的时间。 使用 console.time() 和 console.timeEnd() 来测量开始和结束时间之间的差,以确定回调执行的时间。 const timeTaken = callback => { console.time('timeTaken'); const r = callback(); console.timeEnd('timeTaken'); ret

  • 可能的重复: 如何测量函数的运行时间? 我有一种I/O计时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么<代码>线程<代码>定时器<代码>秒表?还有其他解决方案吗?我想要最准确的,尽可能简短的。

  • 有时候,能够知道一个计算执行消耗的时间是非常有意义的,尤其是在对比和基准测试中。最简单的一个办法就是在计算开始之前设置一个起始时候,再由计算结束时的结束时间,最后取出它们的差值,就是这个计算所消耗的时间。想要实现这样的做法,可以使用 time 包中的 Now() 和 Sub 函数: start := time.Now() longCalculation() end := time.Now() de

  • 问题内容: 中欧夏令时开始于三月的最后一个星期日。我们将时钟设置为02:00到03:00。如果我在数据库请求中进行时间戳计算会发生什么?比方说,在01:59? 结果是03:00还是02:00? 如果我们将时钟设置为03:00到02:00,那结束了呢? 时间从03:00更改为02:00之后…在02:00会发生什么?是02:59还是01:59? 应该如何处理?最佳实践以及Oracle Database

  • 函数的运行时间的长短是衡量这个函数性能的重要指标,特别是在对比和基准测试中,要得到函数的运行时间,最简单的办法就是在函数执行之前设置一个起始时间,并在函数运行结束时获取从起始时间到现在的时间间隔,这个时间间隔就是函数的运行时间。 在Go语言中我们可以使用 time 包中的 Since() 函数来获取函数的运行时间,Go语言官方文档中对 Since() 函数的介绍是这样的。 func Since(t

  • 问题内容: 关于PHP中的函数,我有两个问题: 睡眠时间是否会影响我的PHP脚本的最大执行时间限制?有时,PHP显示消息“超过30秒的最大执行时间”。如果我使用此消息会出现吗? 使用该功能有没有风险?它会消耗很多CPU性能吗? 问题答案: 您应该尝试一下,只需让脚本hibernate超过您的最大执行时间即可。 Spoiler:在Linux下,睡眠时间被忽略,但是在Windows下,它计为执行时间。