【问题标题】:Sprng Boot @Scheduled task stopped working after cron changeSpring Boot @Scheduled 任务在 cron 更改后停止工作
【发布时间】:2018-04-06 08:34:11
【问题描述】:

这里是 Spring Boot。我有一个预定的后台任务,我每小时开始一次:

@Component
public class TokenReaper {
    @Scheduled(cron = "0 0 * * * *")
    public void fire() {
        // Doesn't matter what it does...
    }
}

我实际上需要它现在在每天上午 8:26 运行,所以那时每天只运行一次(奇怪,我知道!),所以我将 cron 表达式更改为:

@Component
public class TokenReaper {
    @Scheduled(cron = "0 26 8 * * *")
    public void fire() {
        // Doesn't matter what it does...
    }
}

进行此更改后,任务在上午 8 点 26 分停止运行,并且由于日志的原因,我无法判断它何时实际运行或它是否实际运行!谁能看看我的新 cron 表达式是否格式错误或没有正确设置为每天早上 8:26 运行?!

【问题讨论】:

  • 试试这个 0 26 8 1/1 * ? *

标签: spring-boot cron


【解决方案1】:

您需要在cron 表达式中添加?

@Scheduled(cron = "0 26 8 * * *") 更改为:

@Scheduled(cron = "0 26 8 * * ?")

【讨论】:

  • 谢谢,我会试一试,只是好奇为什么?!为什么我以前的 cron(每小时运行一次)不需要“?”但我的新 cron 可以吗?
  • 1 秒 2 分钟 3 小时 4 月份 5 个月 6 星期 7 年(可选字段)
  • 是的,但这并不能解释为什么可选字段会有所作为......
  • ? (“无特定值”) - 当您需要在允许字符的两个字段之一中指定某些内容时很有用,但另一个字段中不允许。例如,如果我希望触发器在每月的某一天(比如 10 号)触发,但我不在乎一周中的哪一天,我会在当天输入“10”-月字段和“?”在星期几字段中。
  • 不添加可选字段(年份)。而是将Day-of-Week* 替换为?。这意味着我们不在乎何时,导致它每天重复。明白了吗?
【解决方案2】:

试试这个

@Scheduled(cron = "0 26 8 * * ?")

Cron 表达式由六个字段表示:

second, minute, hour, day of month, month, day(s) of week

示例模式

* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight

【讨论】:

  • 偷我的答案很不方便。
  • @dryleaf :我知道答案,写出正确的答案需要时间,这样用户才能理解什么是错的和应该是什么。我没有兴趣窃取任何人的答案。如果您认为它的可重复信息和我的答案没有用,那么我没有问题删除我的答案。
  • 请继续删除它。
  • @dryleaf :认为我的回答没有有用的信息吗?
猜你喜欢
  • 2014-10-01
  • 2021-02-27
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多