每天的春月表情 1:01:am

我正在尝试让我的代码基于Spring cron表达式以固定的时间表执行。我希望每天在1:01:am执行代码。我尝试了以下表达方式,但这并没有激发我。这里的语法有什么问题?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}

答案 1

尝试使用:

@Scheduled(cron = "0 1 1 * * ?")

您可以在下面找到春季论坛的示例模式:

* "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

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

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

(*)表示匹配任何

*/X意思是“每个X”

?(“无特定值”) - 当您需要在允许字符但不允许另一个字符的两个字段中指定某些内容时很有用。例如,如果我希望我的触发器在一个月的某一天(比如 10 日)触发,但我不在乎一周中的哪一天恰好是,我会在月中的某一天字段中加上“10”,在星期几字段中放置“?”。

PS:为了使它正常工作,请记住在应用程序上下文中启用它:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support


答案 2

对于我的调度程序,我每天早上6点使用它来触发,我的cron表示法是:

0 0 6 * * *

如果你想要 1:01:am,则将其设置为

0 1 1 * * *

调度程序的完整代码

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** 非常重要

要确定调度程序的触发时间正确性,您必须像这样设置区域值(我在伊斯坦布尔):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

您可以从此处找到完整的时区值。

注意:我的Spring框架版本是:4.0.7.RELEASE


推荐