Аспект метрик в транзакционном методе

Я определил следующий аспект измерения времени выполнения некоторых методов:

@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 в своем приложении.


person Gonzalo Calvo    schedule 19.01.2018    source источник
comment
Я нашел ответ, который искал, в другом сообщении: https://stackoverflow.com/questions/33440182/tansactional-and-aspect-ordering   -  person Gonzalo Calvo    schedule 19.01.2018
comment
Возможный дубликат @Tansactional и @Aspect ordering   -  person Gonzalo Calvo    schedule 19.01.2018