首页 > 解决方案 > SpringBoot Scheduler Cron 过度运行

问题描述

有没有专家在使用 springboot 调度程序时遇到问题

试图将它设置为在工作日的下午 2 点到晚上 10 点之间运行,每隔 15 分钟/每小时运行一次,但它似乎是按分钟触发的,是因为我的 cron 错误还是我应该做 smthg 来控制它?

通过 springboot-web-started 在 linux 服务器中运行

@Scheduled(cron = "0 15 14-22 * * MON-FRI")
private void fireDownload() {
    log.info("fireDownload");

    this.jmsXXXX.run(Constants.XXXX);
}

版本

spring-boot 2.4.2
java 11

在此处输入图像描述

标签: spring-bootscheduler

解决方案


请试试这个

@Scheduled(cron = "0 */15 14-22 * * MON-FRI")

你在评论中说这不起作用,所以让我们用一个简单的概念验证来测试它,每 5 分钟触发一次

@Scheduled(cron = "0 */5 8-22 * * MON-FRI")
private void cronPOC() {
    log.info("cronPOC triggered by cron");
}

下面的屏幕截图显示 POC 确实在工作。

在此处输入图像描述

当我们在测试时,让我们将上面评论中的@GerbenJongerius 建议也放到测试中(为了加快速度,进行了一些微小的更改)。

@Scheduled(cron = "0 0/5 8-22 ? * MON-FRI")
private void cronPOC() {
    log.info("cronPOC triggered by cron v2");
}

...这也有效 在此处输入图像描述

一些带有解释的 Spring cron 示例: https ://stackoverflow.com/a/26147143/14072498


推荐阅读