Java永久运行任务来检查时间

问题描述 投票:0回答:1

我编写了一个按计划运行(每秒)的任务。我需要这个预定的方法来监控不记名令牌的生命周期。

我是 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);
            }
        }
    }

也许你们中的一个人有一个对我这个初学者来说可以理解的好主意?

java scheduled-tasks quarkus stopwatch
1个回答
0
投票

我可以提供的一条建议是,不要重复(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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.