20181111 Quartz(慕课网)
Quartz体系结构
三个核心概念
- 调度器
- 任务
- 触发器
重要组成
- Job
- JobBuilder
- JobDetail
- JobStore
- Trigger
- TriggerBuilder
- ThreadPool
- Scheduler
监听器
- JobListener
- TriggerListener
- SchedulerListener
Quartz简单使用
HelloJob的定义
public class HelloJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello Quartz: " + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
}
}
定时调用HelloJob
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("name1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("name1", "group1").startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
System.out.println("任务开始: " + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
scheduler.scheduleJob(jobDetail, trigger);
Job
& JobDetail
- Job实例在Quartz中的生命周期
每次调度器执行Job时,它在调用execute方法前会创建一个新的Job实例。
当调用完成后,关联的Job对象实例会被释放,释放的实例会被垃圾回收机制回收。
JobDetail
JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例
重要属性
- name
- group
- jobClass
- jobDataMap
JobDataMap
获取JobDataMap中内容的两种方式
- 从Map中直接获取
- 添加setter方法对应键值
触发器Trigger
通用属性
- JobKey
- StartTime
- EndTime
SimpleTrigger
- 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值
- 重复执行间隔必须是0或长整数
- 一旦被指定了endTime参数,那么会覆盖重复次数参数的效果
CronTrigger
Cron表达式
用于配置CronTrigger实例。
是由7个子表达式组成的字符串,描述了时间表的详细信息。
格式:秒 分 时 日 月 周 年(可省略)
特殊字符意义
字段 | 是否必填 | 允许值 | 允许的特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
时 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * / ? L W C |
月 | 是 | 1-12或JAN-DEC | , - * / |
周 | 是 | 1-7或SUN-SAT | , - * / ? L C # |
年 | 否 | 空,1970-2099 | , - * / |
符号说明
字符 | 含义 |
---|
- | 所有
? | 不确定值
- | 区间
, | 多个值,或的意思
/ | 递增
L | 最后
W | 指定日期的最近那个工作日
| 序号,第几
L
和W
可以一起使用- 周字段不区分大小写,
MON
和mon
相同 - 利用工具生成表达式
Scheduler
- 主要类:
StdScheduler
- 配置参数默认存储在
quartz.properties
中,在quartz的jar包下,org/quartz/quartz.properties
- 主要函数
- scheduleJob
- start
- standby(挂起)
- shutdown(boolean参数,如果传入true,等待所有job完成后关闭,false或者无参数,立即关闭)
quartz.properties
- 调度器属性
- 线程池属性
- 作业存储设置
- 插件配置
Spring集成
两种方式
- MethodInvokingJobDetailFactoryBean
- JobDetailFactoryBean(更灵活)