Я определил следующий аспект измерения времени выполнения некоторых методов:
@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 в своем приложении.