如何在Spring Boot @Scheduled中设置fixedDelay和initialDelay的分钟数?

10

我是Spring中调度程序的新手。我阅读了许多关于@schedule的文章,但每个示例都以秒和毫秒为单位给出时间。

问题陈述:根据我的需求,在我的程序启动后,我的调度程序将在15分钟之后启动(初始延迟),然后每5分钟执行一次任务(FixedRate)。为实现这一点,我该如何以分钟为单位给出时间?有没有更好的方法来解决这个问题?

代码:

@Configuration
@EnableScheduling
public class ScheduledConfiguration {
    @Scheduled(fixedDelay = 300000, initialDelay = 900000)
    public void scheduleFixedRateWithInitialDelayTask() {

        long now = System.currentTimeMillis() / 1000;
        System.out.println("Fixed rate task with one second initial delay - " + now);
    }
}

通过使用上述程序,我可以实现目标,但我想避免300000 / 900000毫秒的时间。

另一种方法:

@Scheduled(fixedDelay = 5 * 60 * 1000, initialDelay = 15 * 60 * 1000)
3个回答

16

虽然有点晚加入派对,但是这里还有来自Spring的另一种方法。

@Scheduled(fixedDelayString = "PT15M", initialDelayString = "PT2H")

在这里你可以找到有关语法的详细信息


4
根据JavaDocs的说明:
默认情况下,时间单位是毫秒,但可以通过timeUnit进行覆盖。
因此,您可以像这样使用java.util.concurrent.TimeUnit:
// ...
@Scheduled(fixedDelay = 5, initialDelay = 15, timeUnit = TimeUnit.MINUTES)
public void scheduleFixedRateWithInitialDelayTask() {
    // ...
}

这也适用于fixedDelayString


2

fixedDelay和initialDelay都接受以毫秒为单位的值。因此,你可以选择以下任一方式:

@Scheduled(fixedDelay = 300000, initialDelay = 900000)

或者:

@Scheduled(fixedDelay = 5 * 60 * 1000, initialDelay = 15 * 60 * 1000)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接