歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Quartz深入淺出

Quartz深入淺出

日期:2017/3/1 9:39:29   编辑:Linux編程
      1. 什麼是Quartz
        1. Quartz是一個開源的作業調度框架,由java編寫,在.NET平台為Quartz.Net,通過Quart可以快速完成任務調度的工作.
      2. Quartz能干什麼/應用場景
        1. 如網頁游戲中掛機自動修煉如8個小時,人物相關數值進行成長,當使用某道具後,時間減少到4個小時,人物對應獲得成長值.這其中就涉及到了Scheduler的操作,定時對人物進行更新屬性操作,更改定時任務執行時間.
        2. 網頁游戲中會大量涉及到Scheduler的操作,有興趣的朋友可自行聯想.
        3. 企業中如每天凌晨2點觸發數據同步、發送Email等操作
      3. 同類框架對比
        1. TimeTask TimeTask在Quartz前還是顯得過於簡單、不完善,不能直接滿足開發者的較為復雜的應用場景.
      4. 資源
        1. 官網:http://www.quartz-scheduler.org/
        2. 下載:http://www.quartz-scheduler.org/downloads
        3. maven pom
          1. <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>
        4. 源代碼 svn:http://svn.terracotta.org/svn/quartz
        5. 本文章采用的是2.21版本:CSDN下載:http://download.csdn.net/detail/chenweitang123/7636703
        6. 例子Demo:CSDN下載:整理完後上傳.
      5. 框架分析
        1. 接口
        2. 類圖
      6. 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();
      7. 框架核心分析
        1. SchedulerFactory -- 調度程序工廠
          1. StdSchedulerFactory -- Quartz默認的SchedulerFactory
          2. DirectSchedulerFactory -- DirectSchedulerFactory是對SchedulerFactory的直接實現,通過它可以直接構建Scheduler、threadpool 等
            1. ThreadExecutor / DefaultThreadExecutor -- 內部線程操作對象
        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默認實現的簡單線程池,它足夠健壯,能夠應對大部分常用場景
        7. -----以上是Quartz涉及到的一些關鍵對象,詳細的內容如有機會會在後續的文章中展開!
      8. Quartz類圖

        1. 類圖中主要分為5塊:Factory、Bulider、Scheduler、Trigger、JOB
      9. 思想
        1. [java] view plaincopyprint?
          1. // 1、工廠模式 構建Scheduler的Factory,其中STD為Quartz默認的Factory
          2. // 開發者亦可自行實現自己的Factory;Job、Trigger等組件
          3. SchedulerFactory sf = new StdSchedulerFactory();
          4. // 2、通過SchedulerFactory構建Scheduler對象
          5. Scheduler sched = sf.getScheduler();
          6. // 3、org.quartz.DateBuilder.evenMinuteDate -- 通過DateBuilder構建Date
          7. Date runTime = evenMinuteDate( new Date());
          8. // 4、org.quartz.JobBuilder.newJob <下一分鐘> --通過JobBuilder構建Job
          9. JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();
          10. // 5、通過TriggerBuilder進行構建Trigger
          11. Trigger trigger = newTrigger().withIdentity("trigger1","group1")
          12. .startAt(runTime).build();
          13. // 6、工廠模式,組裝各個組件<JOB,Trigger>
          14. sched.scheduleJob (job, trigger);
          15. // 7、start
          16. sched.start();
          17. try {
          18. Thread.sleep(65L * 1000L);
          19. } catch (Exception e) {
          20. }
          21. // 8、通過Scheduler銷毀內置的Trigger和Job
          22. sched.shutdown(true);
              // 1、工廠模式 構建Scheduler的Factory,其中STD為Quartz默認的Factory
              //    開發者亦可自行實現自己的Factory;Job、Trigger等組件
              SchedulerFactory sf = new StdSchedulerFactory();
             
              // 2、通過SchedulerFactory構建Scheduler對象
              Scheduler sched = sf.getScheduler();
          
              // 3、org.quartz.DateBuilder.evenMinuteDate  -- 通過DateBuilder構建Date
              Date runTime = evenMinuteDate( new Date());
          
              // 4、org.quartz.JobBuilder.newJob <下一分鐘> --通過JobBuilder構建Job
              JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();
          
              // 5、通過TriggerBuilder進行構建Trigger
              Trigger trigger = newTrigger().withIdentity("trigger1","group1")
          							.startAt(runTime).build();
          
              // 6、工廠模式,組裝各個組件<JOB,Trigger>
              sched.scheduleJob (job, trigger);
          
              // 7、start 
              sched.start();
          
              try {
                Thread.sleep(65L * 1000L);
              } catch (Exception e) {
              }
          
              // 8、通過Scheduler銷毀內置的Trigger和Job
              sched.shutdown(true);
      10. 一句話看懂Quartz
        1. 1、創建調度工廠(); //工廠模式 2、根據工廠取得調度器實例(); //工廠模式 3、Builder模式構建子組件<Job,Trigger> // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder 4、通過調度器組裝子組件 調度器.組裝<子組件1,子組件2...> //工廠模式 5、調度器.start(); //工廠模式

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-09/107007p2.htm

Copyright © Linux教程網 All Rights Reserved