一.Quartz的学习简述
客官,不要急,请看完下面的内容...
代码可以直接拷贝使用,本文是编写2个定时方法来实现的,如果想要执行1个,删除另1个即可。但是想要知道执行原理请看最后的原理分析
二.执行任务类
1 package com.quartz; 2 3 import java.util.Date; 4 5 /** 6 *className : QuartzTest 7 *description : 定时任务test 8 *@date : 2017年12月5日 9 */10 public class QuartzTest {11 //要执行的方法112 public void run1(){13 System.out.println("我是定时任务。。。111。。。run1。。。"+new Date());14 }15 //要执行的方法216 public void run2(){17 System.out.println("我是定时任务。。。112。。。run2。。。"+new Date());18 }19 }
三.quartz的配置文件
1 219 20 qutarz定时任务 21 22 2324 25 26 27 30 3128 29 32 35 36 3733 34 38 42 43 4439 40 41 45 51 52 5346 49 50 54 6155 59 60
四.Quartz中时间表达式的设置-----corn表达式
各位看官在这个地方不要急,花个10分钟时间就可以把这个表达式学好,一定能写出你想要的时间
1. 表达式介绍
秒 分 时 日 月 周 年
必须 必须 必须 必须 必须 必须 非必
2.关键字说明
* 星号: 表示你想在这个域上包含所有合法的值。
例:在分钟域上使用星号意味着每个月都会触发这个定时任务。
0 * 17 * * ? // 每天下午17时的每分钟都会触发这个定时任务
? 问号: 只能用在日和周域上,但是不能在这两个域上同时使用。
例:假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个,如果不指定,日为*,周为?即可
0 10,44 14 ? 3 WED // 在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。
, 逗号:是用来在给某个域上的值指定一个可选值列表
例:例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个定时任务。
0 0,15,30,45 * * * ? // 每刻钟触发一次定时任务
/ 斜杠:用于时间表的递增的。
例:斜杠在左边的值是指开始的时间,斜杠右边是步长,也就是从哪个时间开始,多少的步长执行这个定时任务
0/15 0/30 * * * ? // 在整点和半点时每15秒触发
- 中划线:用于指定一个范围
例:在小时域上的 3-8 意味着 "3,4,5,6,7 和 8 点,但是不能反过来写!!!
0 45 3-8 ? * * // 在上午的3点至上午的8点的45分时触发
L 字母:说明了某域上允许的最后一个值,它仅被日和周域支持。(这个分为2种情况)
1.当用在日域上,表示的是在月域上指定的月份的最后一天。
例:
0 0 8 L * ? // 每个月最后一天的上午 8:00 触发
2.当用在周域上,指示着周的最后一天,就是星期六 (或者数字7)。
例:
0 59 23 ? * L。 // 在每个月的最后一个星期六下午的 11:59 触发
3.列举表达式
1.每分钟触发的
0 0/1 * * * ?
2.每天触发
"0 0 12 * *?" 每天中午12点触发
"0 15 10 ? **" 每天上午10:15触发
3.每月最后一天触发
"0 15 10 L *?" 每月最后一日的上午10:15触发
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
4.保留字符
# 井号:仅能用于周域中。
W 字母:代表着平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。
五.原理及分析
1.整个配件的介绍
Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。
六.Quartz的工作执行流程
scheduler是一个计划调度器容器(总部),容器中有一个线程池,用来并行调度执行每个作业,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。
七. 需要说明的地方
在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。很显然,第二种方式远比第一种方式来的灵活,以上方法就是按第二种方法来实现的。
由于能力水平有限,没有讲清楚的地方,请各位看官批评指正!!!