我定义了以下方面衡量某些方法的执行时间:
@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。