Как написать пользовательскую аннотацию для метода без действия? - PullRequest
0 голосов
/ 30 ноября 2018

Итак, я следовал учебному пособию по игре здесь , чтобы написать аннотацию регистрации времени для моих методов 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
}

Я знаю, что моя реализация ведения журнала является правильной, поскольку, когда я использую ее в своем методе контроллера, который возвращает результат, время выполнения регистрируется, но есть несколько других вещей, которыеЯ делаю это в своем контроллере, и мое намерение состоит в том, чтобы регистрировать время доступа к БД изолированно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...