Я создал пользовательскую аннотацию для целей статистики, но она не запускается при использовании с CrudRepository следующим образом.
У вас есть совет, как это сделать?
@Repository
public interface UserEntryForAuthRepository extends CrudRepository <UserEntryForAuth, String> {
@Stat(endpoint = EndPoints.ORACLE, method = "get_password")
@Transactional
UserEntryForAuth findByUsername(String username);
}
@Retention(RetentionPolicy.RUNTIME)
public @interface Stat {
EndPoints endpoint();
String method();
}
@Around(value = "@annotation(stat)")
public Object Stat(final ProceedingJoinPoint joinPoint, final Stat stat) throws Throwable {
//String methodName = joinPoint.getSignature().getName();
StopWatch stopWatch = new StopWatch();
try {
stopWatch.start();
// invoke method
Object returnValue = joinPoint.proceed();
metricObserver.increment(CounterMetric.ACTION_COUNTER,stat.method(),"success");
return returnValue;
}
catch (Exception e) {
metricObserver.increment(CounterMetric.ACTION_COUNTER,stat.method(),"fail");
throw e;
}finally {
stopWatch.stop();
//LOGGER.debug("Name: {}, method: {}, elapased:{}",stat.endpoint().name(),stat.method(),stopWatch.getTotalTimeMillis() );
metricObserver.observe(SummaryMetric.RESPONSE_TIME, stopWatch.getTotalTimeMillis(), stat.endpoint().name(), stat.method());
}
}