Quartz2
说白了,就是个功能比较完善的定时器,能够经过指定的时间执行指定的任务。css
应用范围设计模式
a.好比让商城的活动(对象)在指定的时间(定时)从发布变为激活框架
b.好比平台天天2:00去给用户发送通知。ui
c.原本指定商城天天2:00发通知,可是碰到了星期天(触发器)改成1:00发通知this
定时器的应用范围其实很广,上面只是简单举了几个例子。spa
准备.net
资源下载地址:http://www.quartz-scheduler.org/插件
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency>
如上在pom.xml加入要引入的jar包线程
Quartz中的设计模式设计
Builder模式
全部关键组件都有Builder模式来构建 <Builder> 如:JobBuilder、TriggerBuilder
Factory模式
最终由Scheduler的来进行组合各类组件 <Factory> 如SchedulerFactory
Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义本身的Job、Trigger等组件
链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分类似,实现也比较简单,如:
$(this).addClass("divCurrColor").next(".divContent").css("display","block");
newTrigger().withIdentity( "trigger3", "group1").startAt( startTime)
.withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
框架核心分析
SchedulerFactory -- 调度程序工厂
ThreadExecutor / DefaultThreadExecutor -- 内部线程操做对象
StdSchedulerFactory -- Quartz默认的SchedulerFactory
DirectSchedulerFactory -- DirectSchedulerFactory是对SchedulerFactory的直接实现,经过它能够直接构建Scheduler、threadpool 等
JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例
JobExecutionContextImpl
Scheduler -- 调度器
StdScheduler -- Quartz默认的Scheduler
RemoteScheduler -- 带有RMI功能的Scheduler
JOB --任务对象
JobDetail -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的做业状态保存在JobDetail中.
JobDataMap -- JobDataMap用来报错由JobDetail传递过来的任务实例对象
Trigger
SimpleTrigger <普通的Trigger> -- SimpleScheduleBuilder
CronTrigger <带Cron Like 表达式的Trigger> -- CronScheduleBuilder
CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder
DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder
ThreadPool -- 为Quartz运行任务时提供了一些线程
SimpleThreadPool --一个Quartz默认实现的简单线程池,它足够健壮,可以应对大部分经常使用场景
实现思想:
// 一、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory // 开发者亦可自行实现本身的Factory;Job、Trigger等组件 SchedulerFactory sf = new StdSchedulerFactory(); // 二、经过SchedulerFactory构建Scheduler对象 Scheduler sched = sf.getScheduler(); // 三、org.quartz.DateBuilder.evenMinuteDate -- 经过DateBuilder构建Date Date runTime = evenMinuteDate( new Date()); // 四、org.quartz.JobBuilder.newJob <下一分钟> --经过JobBuilder构建Job JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build(); //这里指定的HelloJob.class是job1的实现 // 五、经过TriggerBuilder进行构建Trigger Trigger trigger = newTrigger().withIdentity("trigger1","group1") .startAt(runTime).build(); // 六、工厂模式,组装各个组件<JOB,Trigger> --- 表示建立 sched.scheduleJob (job, trigger); // 七、start sched.start(); try { Thread.sleep(65L * 1000L); } catch (Exception e) { } // 八、经过Scheduler销毁内置的Trigger和Job sched.shutdown(true);
一句话实现:
一、建立调度工厂(); //工厂模式
二、根据工厂取得调度器实例(); //工厂模式
三、Builder模式构建子组件<Job,Trigger> // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
四、经过调度器组装子组件 调度器.组装<子组件1,子组件2...> //工厂模式
五、调度器.start(); //工厂模式
**************************************************************************************************
********来源:http://blog.csdn.net/chenweitang123/article/details/37777399**********
**************************************************************************************************