Итак, я следовал учебному пособию по игре здесь , чтобы написать аннотацию регистрации времени для моих методов DAO, тип возвращаемых данных которых не относится к типу Result (действие).После запуска моего кода без каких-либо ошибок кажется, что аннотация игнорируется.Вот код:
//LogTime.java
@With(LogTimeAction.class)
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogTime {
String logStatement() default "Delay detected";
}
//LogTimeAction.java
public class LogTimeAction extends Action<LogTime> {
public CompletionStage<Result> call(Http.Context ctx) {
Long startTime = System.currentTimeMillis();
CompletionStage<Result> returnValue = delegate.call(ctx);
returnValue.thenRun(() -> {
Long totalTime = System.currentTimeMillis() - startTime;
Logger.info( configuration.logStatement() + (System.currentTimeMillis() - startTime) + " ms");
if (totalTime > 3000) {
Logger.warn(LOG_ABNORMAL_RETRIEVAL_DELAY_DETECTED.getValue().replace("%totalTime%",totalTime.toString()) + configuration.logStatement());
}
});
return returnValue;
}
}
//and this is how I intend to use it in my Service.java
@LogTime(logStatement = "delayed")
public List<Double> getDataFromDB(String column, String value) {
return DAO.getDataFromDB(column, value);//basically running a db query inside this method
}
Я знаю, что моя реализация ведения журнала является правильной, поскольку, когда я использую ее в своем методе контроллера, который возвращает результат, время выполнения регистрируется, но есть несколько других вещей, которыеЯ делаю это в своем контроллере, и мое намерение состоит в том, чтобы регистрировать время доступа к БД изолированно.