事务方法中的度量方面

时间:2018-01-19 09:07:02

标签: java spring hibernate aspect

我定义了以下方面衡量某些方法的执行时间:

@Around("execution(@Metrics * *.*(..))")
public Object metrics(ProceedingJoinPoint pointcut) {
  Logger log = LoggerFactory.getLogger(pointcut.getSourceLocation().getWithinType());
  long ms = System.currentTimeMillis();

  try {
    Object result = pointcut.proceed();
    ms = System.currentTimeMillis() - ms;
    log.info(String.format("Execution of method %s finished in %d ms", pointcut.getSignature().getName(), ms));
    return result;
  }
  catch (Throwable e) {
    log.error(String.format("Execution of method %s ended with an error", pointcut.getSignature().getName()), e);
  }
  return null;
}

当我在我的daos的更新方法中使用它时出现问题,即@Transactional。我得到的结果与实际时间不符。我想它只是测量java代码的执行时间,而不是测量Hibernate执行的数据库更新。

是否可以衡量完整的执行时间?

有关更多信息,我在我的应用程序中使用spring 3.2.9和hibernate 3.5。

0 个答案:

没有答案