【问题标题】:SpringBoot Scheduler Cron over runningSpring Boot Scheduler Cron 过度运行
【发布时间】:2021-04-25 13:46:33
【问题描述】:

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

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

通过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

【问题讨论】:

  • 如果你有下面的石英时间表(这应该是默认的)。请尝试“0 0/15 14-22 ? * MON-FRI”。您不能同时设置月份和星期几指标。
  • @GerbenJongerius:也测试了你的建议,没有区别。请在下面查看我的更新答案。

标签: spring-boot scheduler


【解决方案1】:

请试试这个

@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

【讨论】:

  • 谢谢,我尝试了你分享的示例并阅读了你分享的链接,这对我的情况没有帮助,因为每分钟的工作保持触发器与设置 0/15 或 */15 或15
  • @Kim:请查看我的更新答案和概念验证。请在你身边尝试同样的方法。 BR
  • 好的,我发现我的问题不是因为 cron,而是在另一个不在 Springboot 应用程序主类中的类中创建调度方法时发生的问题......当我比较这两者时,它发生在我的组件类中重复运行 6 次,但主类中的 schedule 方法工作正常
  • @Kim:很高兴听到您发现了错误,我怀疑是这样的。请接受我的回答来关闭问题。 BR
猜你喜欢
  • 2019-02-17
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
相关资源
最近更新 更多