我试图让我的代码在一个固定的时间表上执行,基于Spring cron表达式。我希望代码在每天凌晨1:01执行。我尝试了下面的表达,但这并没有引起我的兴趣。这里的语法有什么问题?
@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
// ...
}
我试图让我的代码在一个固定的时间表上执行,基于Spring cron表达式。我希望代码在每天凌晨1:01执行。我尝试了下面的表达,但这并没有引起我的兴趣。这里的语法有什么问题?
@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
// ...
}
当前回答
试一试:
@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”
? ("no specific value")—当您需要在允许字符的两个字段之一指定某些内容时,非常有用。例如,如果我想让触发器在一个月的某一天(比如,10号)触发,但我不关心这一天是星期几,我将在月的第一天字段中输入“10”,在星期的第一天字段中输入“?”。
PS:为了使它工作,请记住在应用程序上下文中启用它:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support
其他回答
吉皮纳尼的回答中缺少了一些东西
@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")
这将在1.01和13.01执行。当您需要在没有模式的情况下每天多次运行作业时,可以使用它。
zone属性在远程服务器上部署时非常有用。这是在spring 4中引入的。
您可以使用@Scheduled(cron ="0 1 1 * * ?")注释您的方法。
0 -表示秒
1- 1分钟
每天1小时。
对于我的调度程序,我每天早上6点使用它,我的cron符号是:
0 0 6 * * *
如果你想要1:01:am,那么设置为
0 1 1 * * *
调度程序的完整代码
@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
//complete scheduled work
}
非常重要
为了确保调度程序的发射时间的正确性,你必须像这样设置zone值(我在伊斯坦布尔):
@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
//complete scheduled work
}
您可以从这里找到完整的时区值。
注意:我的Spring框架版本是:4.0.7.RELEASE
试一试:
@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”
? ("no specific value")—当您需要在允许字符的两个字段之一指定某些内容时,非常有用。例如,如果我想让触发器在一个月的某一天(比如,10号)触发,但我不关心这一天是星期几,我将在月的第一天字段中输入“10”,在星期的第一天字段中输入“?”。
PS:为了使它工作,请记住在应用程序上下文中启用它:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support
我注意到的一件事是:spring CronTrigger不是cron。你可能在一个有效的cron表达式中有7个参数(你可以在cronmaker.com上验证),然后spring不接受它。大多数情况下,您只需删除最后一个参数,一切正常。