1

我只是可以弄清楚如何在 Quartz 中配置一个具有初始延迟的 Cron 作业。所以我需要一个每小时运行一次的东西,初始延迟为 10 分钟。

"* * 0/1 * * ?"
4

1 回答 1

0

这是一个迟到的答案,希望这对其他人有帮助。我通过在我的服务类中有 2 个预定功能解决了这个问题:

@EnableScheduling
public class DeviceService {

    @Scheduled(initialDelayString = "${devices.update.initial}", fixedDelay = 2592000000L)
    public void initialUpdateDevices() {
        updateDevices();
    }

    @Scheduled(cron = "${devices.update.cron}")
    public void cronUpdateDevices() {
        updateDevices();
    }

    private void updateDevices() {
        ...
    }
}

初始延迟和 cron 表达式在 application.properties 中设置。fixedDelay 存在是因为 Spring 不允许单独使用 initialDelay。我将其设置为 2592000000ms,即 30 天。在我们的应用程序中,潜在的额外更新不会造成任何伤害。

在 application.properties 中:

devices.update.initial = 600000
devices.update.cron = 0 30 1 * * *

最初在 10 分钟(60000 毫秒)后运行,然后在每晚 01:30 运行。

在用于单元测试的 application-test.properties 中:

devices.update.initial = 86400000
devices.update.cron = 0 30 1 24 12 *

我们没有一个单元测试需要 1 天的时间来执行,所以 86400000 毫秒是一个安全的赌注。cron "0 30 1 24 12 *" 设置为人们应该梦想美好事物的平安夜之夜。

于 2016-05-25T20:30:04.787 回答