我的系统中有以下cron表达式:
0 0 0/1 1/1 * ? *
你知道吗?我不知道这意味着什么。写这篇文章的人是他未来两周的假期,所以我必须自己找出答案。可以找到文档here
根据我们的documentation:
* * * * * * *
| | | | | | |
| | | | | | +-- Year (range: 1970-2099)
| | | | | +---- Day of the Week (range: 1-7 or SUN-SAT)
| | | | +------ Month of the Year (range: 0-11 or JAN-DEC)
| | | +-------- Day of the Month (range: 1-31)
| | +---------- Hour (range: 0-23)
| +------------ Minute (range: 0-59)
+-------------- Second (range: 0-59)
好的,让我告诉你我的想法:我相信这个表达意味着:
start when:
seconds: 0
minutes: 0
hours: 0
dayOfMonth 1
monthOfYear any
dayOfWeek any
year any
run every:
1 hour
1 dayOfWeek
when:
dayOfWeek same as on first execution
然而,可用的cron表达式监视器表示它只是意味着每小时。 作为编写高级Java Dev的人,他必须知道编写这种表达式的任何理由而不是:
0 0 * * * * *
我们使用org.springframework.scheduling.quartz.QuartzJobBean
。
简短摘要
嗯,我认为我的问题是:0 0 0/1 1/1 * ? *
和0 0 * * * * *
之间有什么区别?
修改
The documentation可以在这里找到。
答案 0 :(得分:19)
0/1
表示从小时0
开始,并重复每1
小时
1/1
从该月的第一天开始,每个1
天执行
所以这个模式每小时执行一次cron,从月份的第一天开始,每天重复一次。
要求在
?
或dayOfWeek
中使用dayOfMonth
:
指定星期和月日值的支持尚未完成(您必须在其中一个字段中使用“?
”字符)。 - xenteros 7分钟前
然后,0 0 * * * ? *
(而不是0 0 * * * *
,并且?
强制执行)将是相同的表达式,忽略秒和分钟并获取其他元素的每个值,将执行每个小时和每天。
根据您的信息:
0 0 0/1 1/1 * ? *
| | | | | | |
| | | | | | +-- Year (range: 1970-2099)
| | | | | +---- Day of the Week (range: 1-7 or SUN-SAT)
| | | | +------ Month of the Year (range: 0-11 or JAN-DEC)
| | | +--------- Day of the Month (range: 1-31)
| | +------------- Hour (range: 0-23)
| +---------------- Minute (range: 0-59)
+------------------ Second (range: 0-59)
this explanation特殊字符:
*
(“所有值”)
用于选择字段中的所有值。例如,分钟字段中的“”表示“每分钟”。
?
(“无特定值”)
当您需要在允许该字符的两个字段之一中指定某些内容时,非常有用,而另一个字段则不需要。例如,如果我希望我的触发器在该月的某个特定日期(例如,第10天)触发,但不关心恰好在一周的哪一天,我会在当天放置“10” -month字段,以及星期几字段中的“?”。
<强> /
强>
用于指定增量。例如,秒字段中的“0/15”表示“秒0,15,30和45”。并且秒字段中的“5/15”表示“秒5,20,35和50”。你也可以在''字符后指定'/' - 在这种情况下''相当于在'/'之前有'0'。日期字段中的“1/3”表示“从该月的第一天开始每3天触发一次”。
*
和?
要解释表达式中?
和*
之间的区别,首先要看一下这个表:
Field Name Mandatory Allowed Values Allowed Special Characters
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W //allowed '?'
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L # //allowed '?'
Year NO empty, 1970-2099 , - * /
正如您所看到的,?
仅允许在Day of month
中使用,Day of week
在两个字段中都是强制性的,并告诉Quartz此值尚未定义,因此,请使用其他字段字段(如果您将?
放入Day of month
,则使用的值为Day of week
)。
答案 1 :(得分:2)
0 0 * * * ? *
和0 0 0/1 1/1 * ? *
分析不同的标记:
0/1
和*
小时 - 首先是指每天从小时0开始,每小时重复一次,第二个意味着:每小时重复一次
1/1
和*
天 - fisrt表示从月的第一天开始,每天重复,第二天表示每天。
有人使用复杂表达式的原因可能是通过测试,表达式被评估为这种形式,没有人承担简化它的工作,或者可能以前的cron版本工作不同。
答案 2 :(得分:0)
不是答案,只是对@joc正确答案的更新。
就目前而言,QuartzScheduler specifically指出?
可以应用于以下两个位置之一:day_of_month
或day_of_week
。
支持同时指定星期几和每月某天的值还不完善(您当前必须在这些字段之一中使用“?”字符)。
在上面随附的链接中,还有许多示例可以很好地指导您提出自己的示例。
+--------------------+-------------------------------------------------------------------------------------------------------------------------------------+
| **Expression** | **Meaning** |
+--------------------+-------------------------------------------------------------------------------------------------------------------------------------+
| 0 0 12 * * ? | Fire at 12pm (noon) every day |
| 0 15 10 ? * * | Fire at 10:15am every day |
| 0 15 10 * * ? | Fire at 10:15am every day |
| 0 15 10 * * ? * | Fire at 10:15am every day |
| 0 15 10 * * ? 2005 | Fire at 10:15am every day during the year 2005 |
| 0 * 14 * * ? | Fire every minute starting at 2pm and ending at 2:59pm, every day |
| 0 0/5 14 * * ? | Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day |
| 0 0/5 14,18 * * ? | Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day |
+--------------------+-------------------------------------------------------------------------------------------------------------------------------------+