最近又接手了一个闹钟的任务,然后接触到了Quartz框架,接触之后让我感觉很开心啊,因为这个框架从设计的理念来看我和对闹钟的理解非常相似,说明我的闹钟的设计思路还是很正确的。
闲话少说,Quartz的官方文档链接在这里:https://www.w3cschool.cn/quartz_doc/quartz_doc-2put2clm.html 这里面有着详细的介绍。我在这里主要是说明一下Cron表达式。
Cron表达式用来表达定时任务的触发时间和间隔,它由7段或6段字符串组成,中间用空格分开。例如:0 15 10 * * ? 2005 不明白每个字段的含义和允许的值看这个表达式会很懵,所以先列出来各字段的含义及取值:
字段含义 | 是否必须 | 允许值 | 允许的特殊字符 |
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
时 | 是 | 0-23 | , - * / |
日期 | 是 | 1-31 | , - * ? / L W |
月份 | 是 | 1-12或者 JAN-DEC | , - * / |
星期 | 是 | 1-7或者 SUN-SAT (1=SUN) | , - * ? / L # |
年 | 否 | 1970-2099 | , - * / |
然后是特殊字符的含义:
字符 | 含义 |
, | 表示枚举 |
- | 表示范围 |
* | 表示任意值 |
/ | 在/前表示开始时间,在/后表示间隔时间 |
? | 表示不指定值 |
L | 表示最后 |
W | 表示有效工作日(周一到周五) |
# | 用于确定每个月第几个星期几 |
可以看到这个表达式很强大,可以表示各种各样的时间。这里需要注意的一个问题是"?"这个字符,它只可以出现在日期和星期这两个域中,我从网上的很多例子里看到的是同一个表达式中不会同时在这两个位置出现这个字符,而且是指定了一个域的范围之后另一个域就会用这个字符表示。举两个简单的例子:
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
0 0 12 ? * WED 表示每个星期三中午12点
看到这里是不是已经对这个表达式有了一定的理解?看得懂写不出来?没关系,在这里放个地址:http://cron.qqe2.com/ 这个地址可以正向、反向解析Cron表达式,通过这个工具可以自己发挥了。