<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Knight of the round table

    wansong

    Quarz 配置(一) - JobDetail

    Quartz是一個開源的作業調度框架,完全由java寫的,你能通過它創建簡單或者復雜的任務。他能提供巨大的靈活性,但又不犧牲簡單性。

     

    Quartz的核心概念 :調度器、觸發器、作業 

    調度器(Scheduler)

    Scheduler負責管理Quartz的運行環境,Quartz它是基于多線程架構的,它啟動的時候會初始化一套線程,這套線程會用來執行一些預置的作業。

    要創建一個作業并能夠被觸發調用,必須在Scheduler上面注冊一個JobDetailTrigger

    Scheduler提攜了所有TriggerJobDetail,使它們協調工作。這些TriggerJobDetail通過自身的namegroup屬性區分

           Scheduler SchedulerFactory產生,我們可以通過以下方式獲取Scheduler的實例:

         //ServletContext上下文中查找SchedulerFactory

         SchedulerFactory   factory = (SchedulerFactory)

    ServletActionContext.getServletContext().getAttribute("org.quartz.impl.StdSchedulerFactory.KEY");

     

       //獲取Scheduler對象

       Scheduler defScheduler = factory.getScheduler();

    作業

    Job

    任務,其實就是一個接口。要創建一個任務,必須得實現這個接口。該接口只有一個execute方法,任務每次被調用的時候都會執行這個execute方法的邏輯。

    public class TestJob impletemens org.quartz.Job{

             @Override

             public void execute(JobExecutionContext context) throws JobExecutionException{

                       // you business logic

                       // …

                     System.out.println("########### this is testJob running ############");

         }

    }

     

    JobDetail

    JobDetail 用來保存我們作業的詳細信息。一個JobDetail可以有多個Trigger,但是一個Trigger只能對應一個JobDetail。下面是JobDetail的一些常用的屬性和含義

     

     

    參數名

    類型

    備注

    name

    String

    任務的名稱,必須

    group

    String

    任務所在組,默認為DEFAULT

    jobClass

    Class

    任務的實現類,必須

    description

    String

    描述

    jobDataMap

    JobDataMap

    用來給作業提供數據支持的數據結構

    volatility

    Boolean

    重啟應用之后是否刪除任務的相關信息,默認false

    durability

    Boolean

    任務完成之后是否依然保留到數據庫,默認false

    shouldRecover

    Boolean

    應用重啟之后時候忽略過期任務,默認false

    jobListeners

    Set

    監聽器

     

     

    JobDataMap

    這是一個給作業提供數據支持的數據結構,使用方法和java.util.Map一樣,非常方便。當一個作業被分配給調度器時,JobDataMap實例就隨之生成。

    Job有一個StatefulJob子接口,代表有狀態的任務,該接口是一個沒有方法的標簽接口,其目的是讓Quartz知道任務的類型,以便采用不同的執行方案。無狀態任務在執行時擁有自己的JobDataMap拷貝,對JobDataMap的更改不會影響下次的執行。而有狀態任務共享共享同一個JobDataMap實例,每次任務執行對JobDataMap所做的更改會保存下來,后面的執行可以看到這個更改,也即每次執行任務后都會對后面的執行發生影響。

    正因為這個原因,無狀態的Job可以并發執行,而有狀態的StatefulJob不能并發執行,這意味著如果前次的StatefulJob還沒有執行完畢,下一次的任務將阻塞等待,直到前次任務執行完畢。有狀態任務比無狀態任務需要考慮更多的因素,程序往往擁有更高的復雜度,因此除非必要,應該盡量使用無狀態的Job。

    如果Quartz使用了數據庫持久化任務調度信息,無狀態的JobDataMap僅會在Scheduler注冊任務時保持一次,而有狀態任務對應的JobDataMap在每次執行任務后都會進行保存。

    JobDataMap實例也可以與一個觸發器相關聯。這種情況下,對于同一作業的不同觸發器,我們可以在JobDataMap中添加不同的數據,以便作業在不同時間執行時能夠提供更為靈活的數據支持(學校上午放眼保健操錄音第一版,下午放第二版)。

    不管是有狀態還是無狀態的任務,在任務執行期間對Trigger的JobDataMap所做的更改都不會進行持久,也即不會對下次的執行產生影響。

     

     

    posted on 2011-08-07 13:24 w@ns0ng 閱讀(1591) 評論(0)  編輯  收藏 所屬分類: jbossjava

    主站蜘蛛池模板: 久久亚洲精品成人| 亚洲午夜福利在线观看| 亚洲国产成人精品无码区在线秒播 | 欧美男同gv免费网站观看| 亚洲av网址在线观看| 美女视频黄a视频全免费网站色窝| 亚洲人成无码网WWW| 国产精品九九久久免费视频| 久久亚洲中文字幕精品一区四| 皇色在线免费视频| 亚洲精品无码mv在线观看网站| 手机看片国产免费永久| 亚洲第一AAAAA片| 人妻丰满熟妇无码区免费| 亚洲六月丁香六月婷婷蜜芽| 99视频在线精品免费观看6| 亚洲欧美成aⅴ人在线观看| 日本特黄特黄刺激大片免费| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲1区1区3区4区产品乱码芒果| 国产v精品成人免费视频400条| 亚洲色欲色欲www在线播放 | 亚洲人成网站在线播放2019| 免费a级黄色毛片| 色www永久免费网站| 亚洲国产日产无码精品| 国产人妖ts在线观看免费视频| 亚洲免费一区二区| 亚洲视频一区在线播放| 麻豆国产人免费人成免费视频| 免费国产在线精品一区| 国产aⅴ无码专区亚洲av| 日本妇人成熟免费中文字幕 | 亚洲色成人中文字幕网站| 222www免费视频| 妇女自拍偷自拍亚洲精品| 亚洲国产精品一区二区成人片国内| 91福利视频免费观看| 婷婷国产偷v国产偷v亚洲| 亚洲AV日韩AV永久无码久久 | 日本亚洲欧美色视频在线播放|