Quartz浅析

来源:互联网 发布:windows ce 5.0 编辑:程序博客网 时间:2024/06/10 20:52
Quartz
1、简介
2、设计模式
builder模式,factory模式,组件模式,链式写法
3、核心
1)调度器(scheduler)
2)任务(JobDetail)
3)触发器(SimpleTrigger和CronTrigger)
4、执行方式
1)编写一个job实现类,实现相应的job任务
2)使用JobDetail封装job,使用JobBuilder创建一个JobDetail,然后用newJob(job.class),绑定在JobDetail上
3)创建一个trigger,使用TriggerBuilder创建,并设置trigger相应的属性
4)创建一个scheduleFactory,此处采用了工厂模式
5)获取一个scheduler,将jobDetail和trigger绑定,这样就知道执行的哪个类型的job了。
注:每当scheduler执行job时,调用execute方法前会创建该类的新的实例,执行完毕后,该实例被丢弃,实例被垃圾回收,这就导致了job的属性值是不存在的。为job增加属性或者配置,使用JobDataMap,JobDataMap是JobDetail的一部分。
5、Job&JobDetail
1)Job
Job接口只有一个execute方法,该方法是job的业务执行的方法。
2)JobDetail
JobDetail由JobBuilder创建的,JobBuilder采用了builder设计模式。
2.1) JobDataMap
JobDataMap中可以存储序列化的数据对象,在job实例中可以使用jobDataMap中保存的数据。
存储的方式:usingJobData(key,value)
在job实例中取的方式:JobKey key = context.getJobDetail().getKey()
JobDataMap dataMap = context.getJobDetail().getJobDataMap()
Object object = dataMap.get(key)
(另外一种): JobDataMap dataMap = context.tail().getJobDataMap()
2.2) JobExecutionContext
JobExecutionContext包含job上下文信息,获取方式如JobDataMap。
6、Trigger
Quartz中的触发器,用来告诉业务调度程序作业何时触发,即Trigger对象是用来触发执行Job的。
trigger的实现有:DailyTimeIntervalTriggerImpl、CalendarIntervalTriggerImpl、CronTriggerImpl(常用)、SimpleTriggerImpl(常用)
6.1) trigger的通用属性
jobKey:表示job实例的标识,触发器触发的时候,该指定的job实例会执行。
startTime:触发器首次触发的时间。
endTime:触发器不再被触发的时间。
6.2) SimpleTrigger
在一个时间段内执行一次任务或者在指定的时间间隔内重复执行作业任务。
属性:
satrtAt(date) :trigger启动的时间
endAt(date):trigger结束时间
6.3) CronTrigger
基于日历的作业调度,不像SimpleTrigger那样精确指定时间间隔,比SimpleTrigger常用。
Cron表达式:
http://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html
7、Scheduler
所有的scheduler实例有SchedulerFactory创建,维护Trigger和job的注册表。SchedulerFactory的两个实现类:StdSchedulerFactory(声明式配置)和DirectSchedulerFactory(编程式配置)
7.1) scheduler的获取方式:
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
和 DirectSchedulerFactory factory = DirectSchedulerFactory.getInstance();
Scheduler scheduler = factory.getScheduler();
7.2) StdSchedulerFactory
1)使用一组参数(java.util.Properties)来创建和初始化Quartz调度器
2)配置参数一般保存在quartz.properties中
3)通过getScheduler()方法初始化和创建scheduler