【发布时间】:2022-02-10 16:44:56
【问题描述】:
我需要我的任务从上午 9 点到下午 6 点每 59 秒运行一次,我的意思不是每分钟的 59 秒,而是上一次运行结束后的 59 秒。所以我为我的调度程序设置了这样一个 cron */59 * 9-21 * * *
有代码
@Scheduled(cron = "*/59 * 9-21 * * *")
public void schedule() {
try {
log.info("Scheduler starts!");
} catch (Exception e) {
log.error("Error was caught in scheduler", e);
}
}
这就是我在日志中看到的:
2022-02-09 16:01:00.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:01:59.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:02:00.001 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:02:59.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:03:00.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:03:59.001 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:04:00.001 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:04:59.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:05:00.001 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:05:59.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:06:00.001 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:06:59.002 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
2022-02-09 16:07:00.001 | spring-vault-ThreadPoolTaskScheduler-1 | INFO | com.app.MyScheduler [ / ] - Scheduler starts!
为什么它会以这种方式工作并在每分钟的 59 秒和 00 秒重复运行?我的 cron 错了吗?
更新: 我正在使用 grails 4.0.1
【问题讨论】:
-
我不确定是否可以使用 cron 表达式。
fixedRate = 59是一个选项吗? -
但是是否可以在固定利率中设置从上午 9 点到下午 6 点的范围?因为我现在不是,这就是我选择 cron 的原因
-
你的 cron 表达式没问题。您可以使用以下方法对其进行测试: var expression = CronExpression.parse("*/59 * 9-21 * * *"); var 结果 = 表达式.next(LocalDateTime.now()); System.out.println(结果);
标签: java spring cron scheduled-tasks