我编写了一个按计划运行(每秒)的任务。我需要这个预定的方法来监控不记名令牌的生命周期。
我是 Java 新手,想知道是否有更好、更优雅的解决方案。我没有通过搜索找到任何合适的东西。也许我也用错了术语。
我使用:StopWatch(org.apache.commons commons-lang3 版本 3.13.0) 为了构建和测试,我使用 Maven 和 Quarkus。 (io.quarkus.scheduler.Scheduled)
我预定的方法:
@Scheduled(every = "1s")
public void checkStopuhr() {
if (stopwatch.isStarted() && (stopwatch.getTime() / 1000) >= maxLifetimeBearerToken) {
try {
//System.out.println("Stopuhr vor reset: " + stopwatch.getTime());
refreshBearer(clientAppId);
} catch (IOException e) {
logger.atError().log("Error Methode: ServiceTokenImpl.checkStopuhr(), Fehler beim Erstellen eines neuen Bearer-Tokens.");
}
} else if(stopwatch.isStarted() && (stopwatch.getTime()/1000) > (maxLifetimeBearerToken + 1)){
logger.atWarn().log("Die Stopuhr funktioniert nicht richtig. Sie wurde ausgelöst bei {} Sekunden",stopwatch.getTime()/1000);
} else {
if(stopwatch.isStarted()){
System.out.println("verstrichene Zeit = " +stopwatch.getTime()/1000);
}
}
}
也许你们中的一个人有一个对我这个初学者来说可以理解的好主意?
我可以提供的一条建议是,不要重复(DRY)。重构您的代码以减少对
stopwatch.isStarted()
的重复调用和 stopwatch.getTime() / 1000
的计算。我认为您想检查 next 秒是否大于 maxLifetimeBearerToken
与您的 else if
。比如,
@Scheduled(every = "1s")
public void checkStopuhr() {
if (!stopwatch.isStarted()) {
return;
}
long swTime = stopwatch.getTime() / 1000;
if (swTime >= maxLifetimeBearerToken) {
try {
refreshBearer(clientAppId);
} catch (IOException e) {
logger.atError().log("Error Methode: ServiceTokenImpl.checkStopuhr(), "
+ "Fehler beim Erstellen eines neuen Bearer-Tokens.");
}
} else if (swTime + 1 > maxLifetimeBearerToken) {
logger.atWarn().log("Die Stopuhr funktioniert nicht richtig. Sie wurde "
+ "ausgelöst bei {} Sekunden", swTime);
} else {
System.out.println("verstrichene Zeit = " + swTime);
}
}