Quartz2 定時器 《一》(概述)

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中的設計模式設計

  1. Builder模式

    1. 全部關鍵組件都有Builder模式來構建  <Builder> 如:JobBuilder、TriggerBuilder

  2. Factory模式

    1. 最終由Scheduler的來進行組合各類組件  <Factory> 如SchedulerFactory

  3. Quartz項目中大量使用組件模式,插件式設計,可插拔,耦合性低,易擴展,開發者可自行定義本身的Job、Trigger等組件

  4. 鏈式寫法,Quartz中大量使用鏈式寫法,與jQuery的寫法有幾分類似,實現也比較簡單,如:

    1.  $(this).addClass("divCurrColor").next(".divContent").css("display","block");  

    2. newTrigger().withIdentity( "trigger3""group1").startAt( startTime)

              .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

 

框架核心分析

 

  1. SchedulerFactory    -- 調度程序工廠

    1. ThreadExecutor / DefaultThreadExecutor   -- 內部線程操做對象

    2. StdSchedulerFactory   -- Quartz默認的SchedulerFactory

    3. DirectSchedulerFactory  --   DirectSchedulerFactory是對SchedulerFactory的直接實現,經過它能夠直接構建Scheduler、threadpool 

  2. JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法傳遞的參數就是對象的實例

    1. JobExecutionContextImpl

  3. Scheduler    -- 調度器

    1. StdScheduler    -- Quartz默認的Scheduler

    2. RemoteScheduler  -- 帶有RMI功能的Scheduler

  4. JOB --任務對象

    1. JobDetail  -- 他是實現輪詢的一個的回調類,可將參數封裝成JobDataMap對象,Quartz將任務的做業狀態保存在JobDetail中.

    2. JobDataMap --  JobDataMap用來報錯由JobDetail傳遞過來的任務實例對象

  5. Trigger

    1. SimpleTrigger <普通的Trigger> --  SimpleScheduleBuilder

    2. CronTrigger  <帶Cron Like 表達式的Trigger> -- CronScheduleBuilder

    3. CalendarIntervalTrigger <帶日期觸發的Trigger> -- CalendarIntervalScheduleBuilder

    4. DailyTimeIntervalTrigger <按天觸發的Trigger> -- DailyTimeIntervalScheduleBuilder

  6. ThreadPool  --  爲Quartz運行任務時提供了一些線程

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

**************************************************************************************************

相關文章
相關標籤/搜索