因此,我遵循了玩法教程here,以便为我的DAO方法编写一个时间记录批注,其返回类型不是Result(action)类型。在运行完我的代码而没有任何错误之后,注解似乎已被忽略。这是代码:
//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
}
我知道我的日志记录的实现是正确的,因为当我在确实返回Result的控制器方法上使用它时,正在记录执行时间,但是我在控制器中还有其他几件事,我的意图是单独记录数据库访问时间。