我面临着cron表达式的问题。 我必须每隔30分钟从周四到周日运行一种方法。时间从20:35开始到23:35分钟。
Cron表达:
"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
任何人都可以帮助我。为什么cron表达每1小时进行一次评估。??
以下是代码示例:
@Scheduled(cron="0 35/30 20-23 ? * THU-SUN")
public void startInboundSFTPChannel(){
logger.info("Cron job started....");
downloadSftpFilesController();
}
答案 0 :(得分:2)
如果您希望命令从星期四到星期日每天从20.35运行到23.35,则可以分两步进行定义:
35 20 ? * THU-SUN
5-59 21-23 ? * THU-SUN
没有简单的方法可以在cron表达式中设置它,因为你不希望它在20.05运行。
即:在20,在分钟35运行。在21至23小时,every 30 minutes with an offset of 5 minutes。
我的答案基于这种格式:
+---------------- 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
答案 1 :(得分:1)
据我了解,您的表达式(0 35/30 20-23 ? * THU-SUN
)表示:
0
- 仅限整分运行,35/30
- 每隔30分钟从35开始运行,20-23
- 在20到23之间运行,?
- 使用表达式后期部分的隐含天数*
每个月运行一次,THU-SUN
- 在周四,周五,周六和周日举行。因此,当你指定一个增量而不是两个值Quartz(Spring使用它)时,会尝试对此进行计算,如下所示:
35
- 与0-59
条件匹配的内容,30
添加到上一个35
(等于65
)与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
- 从分钟开始每30分钟运行== 5,20-23
- 在20到23之间运行,?
- 使用表达式后期部分的隐含天数*
- 每个月都有一次,THU-SUN
- 在周四,周五,周六和周日举行。Here你可以找到类似的问题。