每天的cron cron表达1:01:am


202

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

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



我的cron表达式0 0 0 1 JAN MON一直工作到去年。1月1日起停止工作,说无效的cron表达式。尽管这是为了减少频率,但我们能够运行tc服务器。1月1日之后,它没有。当我更改为0 0 7时?* SUN它开始工作。我很想知道为什么0 0 0 1 JAN MON停止工作,因为去年1月情况良好。
spandey

0 0 0 1 JAN MON可能是错误的表达方式,在这个方面它也能正常工作,并且tc服务器从不抱怨
spandey

Answers:


573

尝试:

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

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

* "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-注释支持



1
我想spring cron也可以提供秒数设置,但是普通的unix cron是基于分钟的……因为在unix手册页中,minimum是可以配置的最小时间单位。
nanosoft

8
“”的意义是什么?字符?它仅适用于“星期几”字段吗?如果我们替换了'?',它会起作用/有所不同吗?在圣诞节示例中使用“ *”?
2015年



90

对于我的调度程序,我每天使用它在凌晨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


1
我不知道您的答案为什么只有12个,即使这是这里唯一的正确答案!

2
非常感谢@MoayadAbuJaber。分数并不重要,如果开发人员能够用我的答案解决问题,那就很高兴了。
巴哈迪尔·塔斯迈尔

我可以将zone与xml config sheduler一起使用<task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/>吗?
shareef

3
竖起大拇指提及时区
Forhad '17

2
谢谢,@ Forhad。如果您是开发人员并且要处理与日期和时间有关的任何问题,则必须了解时间戳,时区和转换的详细信息。否则,您的数据将是无稽之谈
Bahadir Tasdemir

22

您可以使用注释方法@Scheduled(cron ="0 1 1 * * ?")

0-秒

1至1分钟

一天中的1小时。


12

gipinani的答案中缺少的东西

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

这将在1.01和13.01执行。当您需要每天多次运行无模式的作业时,可以使用它。

在远程服务器中进行部署时,zone属性非常有用。它是在Spring 4引入的。


2
请注意,缩写(对于时区)的支持仅出于JDK 1.1.x兼容性的考虑,应使用全名-按照javadoc
slashron

6

我注意到的一件事是:Spring CronTrigger不是cron。您可能会在有效的cron表达式(可以在cronmaker.com上进行验证)中以7个参数结尾,然后不接受它。在大多数情况下,您只需删除最后一个参数即可,一切正常。


1
“ CronTrigger不是石英”
Sandy Simonton

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.