我遇到了cron表达式的问题。 我必须从周四到周日每 30 分钟运行一次方法。时间将从20:35分钟到23:35分钟。
克龙表达式:
"0 35/30 20-23 ? * THU-SUN";
根据我的理解;我的方法将在周四 20:35 分钟每 30 分钟调用一次,直到周日。
我的期望:
方法将按照以下时间调用:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:05:00 IST 2016
Thu May 19 21:40:00 IST 2016
但; 方法通过以下计时获取调用:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:35:00 IST 2016
Thu May 19 22:35:00 IST 2016
谁能帮我。为什么每 1 小时评估一次 cron 表达式。??
下面是代码示例:
@Scheduled(cron="0 35/30 20-23 ? * THU-SUN")
public void startInboundSFTPChannel(){
logger.info("Cron job started....");
downloadSftpFilesController();
}
如果您希望命令从每天 20.35 运行到 23.35,从星期四到星期日,可以通过两个步骤定义它:
35 20 ? * THU-SUN
5-59 21-23 ? * THU-SUN
没有简单的方法可以在 cron 表达式中进行设置,因为您不希望它在 20.05 运行。
即:在 20 时,在 35 分钟运行。在21至23小时,每30分钟一次,偏移5分钟。
我的答案基于这种格式:
+---------------- minute (0 - 59)
| +------------- hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +------- month (1 - 12)
| | | | +---- day of week (0 - 6) (Sunday=0 or 7)
| | | | |
* * * * * command to be executed
据我了解,您的表达式(0 35/30 20-23 ? * THU-SUN
)的意思是:
0
- 仅以整分钟运行,35/30
- 每 30 分钟运行一次,从 35 开始,20-23
- 运行时间在 20 到 23 之间,?
- 使用表达式后面部分的隐含日,*
每个月运行,THU-SUN
- 在周四、周五、周六和周日运行。
因此,当您指定一个增量而不是两个值时,Quartz(Spring 使用)尝试像下面这样计算它:
- 首先,它计算分钟
35
的值 - 与条件匹配0-59
, - 其次,它为以前的
35
(等于65
)增加了30
与条件不匹配的内容0-59
, - 最后,唯一正确的值是
35
。
因此,它每小时运行一次您的代码,当分钟==35
。
你能处理在Thu May 19 20:05:00 IST 2016
再次运行代码吗?
如果是,则可以使用以下表达式之一:
0 5,35 20-23 ? * THU-SUN
这意味着:
0
- 仅在整分钟运行时运行,5,35
- 每 30 分钟运行一次,从分钟 == 5 开始,20-23
- 运行时间在 20 到 23 之间,?
- 使用表达式后期的隐含天数,*
- 每月运行一次,-
THU-SUN
- 周四、周五、周六和周日运行。0 5/30 20-23 ? * THU-SUN
这意味着:
0
- 仅在整分钟运行时运行,5/30
- 从分钟== 5开始每30分钟运行一次,20-23
- 运行时间在 20 到 23 之间,?
- 使用表达式后面部分的隐含日,*
- 每月运行一次,THU-SUN
- 在周四、周五、周六和周日运行。
在这里你可以找到类似的问题。