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**********
**************************************************************************************************