首先QuartZ是openSymphony开源组织在JOB Scheduling领域又一个开源项目,Java开发完成,设计用于J2EE\J2SE应用中。
1.job
表示一个任务(工作),要执行的内容,或者逻辑代码。
2.jobDetail
jobDetail表示一个具体的可执行的调度程序。
job是这个可执行程序调度所要执行的内容,包含这个任务调度的方案和策略,
告诉调度容器Scheduler,将要执行哪个类JOB的哪个方法;
3,Trigger
是一个类,代表一个参数的配置,Cron的表达的地方。
一个job可以对应多个Trigger,但一个Trigger只能对应一个job
4.Scheduler
代表一个调度容器,一个调度容器能注册多个jobDetail和Trigger。
Scheduler可以将trigger绑定到某一job Detail中,这样当Trigger出发时,对应的job就执行。
Note:当jobDetail和Trigger在scheduler容器上注册后,形成了装配好job Detail和Trigger。就可以随容器启动而执行了。
1.表达式Cron
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域。
每个域代表一个含义。成为七子表达式。
1.1域
1)Seconds(秒):,-/四个字符,有效范围0-59的整数。
2)Minutes(分钟):,-/四个字符,有效范围0-59的整数。
3)Hours(小时):,-/四个字符,有效范围0-23的整数。
4)DayofMonth(日of月):,-? LWC 八个字符,有效范围1-31的整数。
5)Month(月):,-/四个字符,有效范围为1-12的整数。
6)DayofWeek(日of星期):,-/?LC#八个字符,有效范围为1-7的整数。
1表示星期天,2表示星期一,类推,国外与国内星期的定义不同。
7)Year(年):,-*/四个字符,有效范围为1970-2099年。
1.2字符含义
1)表示匹配该与的任意值,例如:Minutes域使用,即表示每分钟都会触发事件。
2)?表示不指定值,只能用在DayofMonth和DayofWeek两个域,因为这两个域会互相影响,例如: 想在每月的15日出发调度,不管20日到底是星期几,则只能使用如下写法:
13 13 15 15 * ?,其中最后一位只能用?,而不能用*,如果使用 *表示不管星期几都会触发。
3)-表示范围,例如在Minutes域使用5-20,表示从5分到20分每分钟触发一次
4)/表示起始时间开始出发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味5分钟触发一次,而25,45等分别触发一次。
5),表示列出枚举值。例如:在Minutes域使用5,20意味着5和20分每分钟触发一次。
6)L表示最后,只能出现则DayofMonth和 DayofWeek域。如果在DayofMonth写L表示这个月的最后一天,如果在DayofWeek写L表示每个星期的最后一天(星期六)。如果在DayofWeek域使用5L是在最后一个星期四触发。
7)W表示最近有效工作日(周一到周五),只能出现在DayofMaonth域,系统将在离指定日期的最近的有效工作日触发事件。例如;DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发;如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨越年份。
8)LW 这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
9)# 用于确定每个月第几个星期几,只能出现在DayofWeek域。例如:4#2,表示某月的第二个星期三。
1.3示例
0 0 12 * * ?每天中午12点触发
0 15 10 ? * * 每天上午10:15触发
0 15 10 * * ? 每天上午10:15触发
0 15 10 * * ? * 每天上午10:15触发
0 15 10 * * ? 2005 2005年的每天上午10:15触发
0 * 14 * * ? 在每天下午2点到下午2:29期间的每一分钟触发
0 0/5 14 * * ? 在每天下午 2 点到下午 2:55 期间的每 5 分钟触发
0 0/5 14,18 * * ? 在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发
0 0-5 14 * * ? 在每天下午 2 点到下午 2:05 期间的每 1 分钟触发
0 10,44 14 ? 3 4 每年三月的星期三的下午 2:10 和 2:44 触发
0 15 10 ? * MON-FRI 周一至周五的上午 10:15 触发
0 15 10 15 * ? 每月 15 日上午 10:15 触发
0 15 10 L * ? 每月最后一日的上午 10:15 触发
0 15 10 ? * 6L 每月的最后一个星期五上午 10:15 触发
0 15 10 ? * 6L 2002-2005 2002 年至 2005 年的每月的最后一个星期五上午 10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午 10:15 触发