介绍
任务调度有两种方式:SimpleTrigger和CronTrigger。比较常用的是CronTrigger,它更灵活。
CronTrigger可以设置一个重复的任务调度计划,如:每周五12:00执行一次任务。
示例
//使用simpleTrigger规则,每下一分钟执行一次
Trigger trigger =
newTrigger().withIdentity("trigger1","group1").startAt(runTime).build();
//使用cornTrigger规则,每20秒执行一次
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0/20 * * * * ?")).build();
Cron-Expression
Cron-Expression用于配置CronTrigger的实例,是由七个子表达式按顺序排列组成的字符串。各个子表达式用空格隔开,分别描述了计划的各个细节。七个子表达式都有一组可以指定的有效值,如下表所示:
表达式 | 有效值 |
---|---|
秒 | 0 ~ 59 |
分钟 | 0 ~ 59 |
小时 | 0 ~ 23 |
日 | 1 ~ 31 |
月 | 0 ~ 11 或者 JAN ~ DEC (注意给定月份有多少天) |
星期 | 1 ~ 7 或者 SUN ~ SAT (1代表星期日) |
年(可选字段) | 1970 ~ 2099 |
一个完整的Cron-Expression示例:"0 0 12 ? * FRI"
,意思是每个周五12:00:00。
特殊字符
*
表示通配符。例如:在月表达式写*
表示每月。/
表示指定增量值。例如:在秒表达式写0/20
表示第0秒触发一次,第20秒再触发一次,第40秒再触发一次。在分钟表达式写3/20
表示第3分钟触发一次,第23分钟再触发一次,第46分钟再触发一次。?
表示无特定值。只能用在日表达式和星期表达式中。例如:想在每月20日触发调度,不管20日是星期几,则只能使用写法:0 0 0 20 * ?
,最后的星期表达式只能用?
,而不能使用*
,因为*
表示不管星期几都会触发。-
表示范围。例如在分钟表达式写5-20
,表示从5分钟到20分钟,每分钟触发一次。#
用于指定每个月的第几个星期几。只能出现在月表达式中。例如:4#2
表示某月的第二个星期三。W
表示有效工作日(周一到周五),只能出现在日表达式,系统将在离指定日期最近的工作日触发。例如:5W
,如果5日是星期六,那么将在最近的工作日星期五触发。另外,W的最近寻找不会跨过月份。L
表示最后。只能出现在日表达式和星期表达式。例如:5L
出现在星期表达式,表示一个月的最后一个星期四。5L
出现在日表达式,表示一个月的倒数第5天。,
表示多个。例如,在星期表达式中使用WED,FRI
,表示一个月的每周三和每周五触发。
参考资料:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-06.html
参考资料:https://www.cnblogs.com/junrong624/p/4239517.html