Quartz中我们可以用cornExpression来定义一个job的执行计划,与unix中的cron非常相似,不过Quartz中的cornExpression可以支持到秒,这比unix中支持的分钟级调度要精确的多。
用一个表格来表示cornExpression中支持的7个域
CornExpression
字段名 | 必须 | 允许值 | 特殊值 |
---|---|---|---|
秒 | Y | 0-59 | , - * / |
分 | Y | 0-59 | , - * / |
时 | Y | 0-23 | , - * / |
日 | Y | 1-31 | , - * ? / L W |
月 | Y | 1-12 /JAN-DEC | , - * / |
周 | Y | SUN-SAT | , - * ? / L # |
年 | N | 1970-2099 | , - * / |
允许值都很好理解,下面来说说特殊值的含义
- “ , ”:用“,”来分隔几个不连续的允许值,例如“1,3,5”或者“SUN,WED”等等。
- “ * ”:意味着可以在这一域上使用任意一个允许值。
- “ - ”:用“-”来确定一个范围比如“5-9”表示5到9之间的所有值,包括5和9。
- “ ? ”:在日和周这两个域可以用,表示没有特定值。
- “ / ”:这个符号是用来表示增量的,例如“0/15”表示从0开始每增加15个“域的单位”调度一次任务
- “ L ”:这个用在日和周里面,用在日上时,表示在当月最后一天触发,用在周上时表示周的最后一天,这里需要注意星期六是最后一天,很多人会在周六周天这个问题上犯错误。
- “ W ”:W在日域,表示工作日,周一到周五。
- “ # ”:用在周域里面,表示允许的月份中第几周的哪一天。“1#2“表示在第二周的第一天(周天)触发任务。
结合几个例子来讲讲具体怎么用吧。
- ”* * * ? * * “ : 每分每秒都会触发一个任务的执行
- “0 0 0 ? * * “ : 每天的0点0分0秒触发一次任务
- “0 0/30 12-14 ? * *” : 每天的12到14点开始每隔30分钟触发一次任务
- “30 * 10,15,20 W 1-6 * *” : 从一月到6月每个工作日的10点00分30秒,15点00分30秒,20点00分30秒触发一次任务
- ”* * 0/2 * * 3#2 *” : 每个月的第二周的第三天从0点开始,每隔2小时触发一次任务
现在差不多已经掌握Quartz中cornExpression的用法了吧?
试试这个表达式 “20-40 * 12,14,16,18 W 3-9 L *“ 表示什么意思吧。。