Spring @Scheduled cron 作业与 Instant.now() 结合使用

Spring @Scheduled cron job in combination with Instant.now()

提问人:Lukas 提问时间:11/21/2022 更新时间:11/21/2022 访问量:168

问:

在 Spring 中,我使用标准的 CRON 作业调度,每 10 分钟进行一次业务级别测量,在此示例中

@Async
@Scheduled(cron = "0 0/10 * * * ?")
public void takeMeasurements() {
    Instant dateTimeNow = Instant.now();

    // Business impl of measurements taking & storing into DB
}

在多个客户环境(Win、MacOS、Linux)下,我在docker中作为SpringBoot容器运行时对此实现没有问题,但我观察到在一个Win10 Enterprise环境中,当CRON作业触发时调用的时间戳具有“过去”的时间,例如 本应在 12:00:00 被解雇的工作。Instant.now()11:59:59:998

我可以用一些可接受的偏差范围来处理这种情况(就我的目的而言,可以进行 +-30 的“四舍五入”),但对于某些人/场景来说,它可能不是。

这背后的问题在哪里?

CRON不是使用与使用的相同的机器时钟吗?java.time.Instant

java spring cron java.time.instant

评论

0赞 mvn.2047 11/21/2022
您是否尝试过在 Java 9+ 上运行代码?这也是一个很好的解决方案,@StormeHawke - stackoverflow.com/a/20689298/12312179
0赞 Lukas 11/21/2022
忘了提 - 我所有的容器都使用 JDK 11 运行

答: 暂无答案