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

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

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

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    [導入]Quartz 任務調度

    Posted on 2005-11-22 17:55 canonical 閱讀(1100) 評論(0)  編輯  收藏 所屬分類: 軟件開發

    quartz是一個高質量的任務調度軟件包。其主要組成部分為:

    Scheduler接口: quartz的執行線程,它根據Trigger決定調度時刻,根據JobDetail的說明實例化并運行Job

    JobDetail類: 可持久化的任務描述信息。任務雖然分組,但是僅用作管理標示,任務之間并無實質性關聯, 例如無法定義job chain。

    Trigger類:任務的調度策略。這里的特點是調度策略與任務描述分開,調度策略和任務描述都可以分別在Scheduler注冊,然后再關聯起來。JobDetail與Trigger的關系是一對多。

    JobDataMap: 將任務的運行時可持久化狀態信息從JobDetail類中分離出來

    Job接口: 任務的執行代碼

    StatefulJob接口: 無狀態任務對應的JobDataMap可以認為是只讀的,而有狀態的任務在多次執行過程中保留對JobDataMap所作的修改,一個后果是有狀態任務無法被并發執行。

    JobExecutionException類: 可以通過JobExecutionException調整調度程序的下一步動作
    Calendar接口: 用于從trigger的調度計劃中排除某些時間段,例如假期等。

    以上幾個部分的交互關系如下:
    class JobImpl implements Job{
        public void execute(JobExecutionContext context) throws JobExecutionException{
            JobDetail detail = context.getJobDetail();
            JobDataMap dataMap = detail.getJobDataMap();
            ...
        }
    }

    scheduler.addCalendar("myHolidays", holidayCalendar, false);
    trigger.setCanlendarName("myHolidays");

    JobDetail jobDetail = new JobDetail(jobName, jobGroupName, JobImpl.class);

    scheduler.scheduleJob(jobDetail, trigger);

    JobDetail可以設置如下屬性:
    1. Durability: non-durable的任務當不再與任何active trigger關聯的時候將會從scheduler中被自動刪除。
    2. Volatility: volatile的任務在scheduler的兩次啟動之間不會被持久化
    3. RequestsRecovery: 如果在執行過程中程序意外崩潰,標記為"request recovery"的任務在scheduler重起之后將會被再次執行,此時JobExecutionContext.isRecovering()返回true.

    Trigger可以設置如下屬性:
    1. misfireInstruction: 設定當trigger錯過了觸發時刻的時候需要采取的處理策略

    SimpleTrigger按照固定的時間間隔進行觸發
    startTime, endTime, repeatCount, repeatInterval

    CronTrigger按照日歷間隔進行觸發
    seconds minutes hours day-of-month month day-of-week

    在quartz內部,QuartzSchedulerThread按照時間順序選擇trigger(沒有任務優先級的概念), 然后在JobRunShell中運行Job。

    JobRunShell中的調用順序如下:

    TriggerListener.triggerFired
        Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed.

    TriggerListener.vetoJobExecution
        Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed.

    JobListener.jobToBeExecuted
        Called by the Scheduler when a JobDetail is about to be executed (an associated Trigger has occured).

    Job.execute
        Called by the Scheduler when a Trigger fires that is associated with the Job.
     
    JobListener.jobWasExecuted
        Called by the Scheduler after a JobDetail has been executed, and be for the associated Trigger's triggered(xx) method has

    been called.

    Trigger.executionComplete
        Called after the Scheduler has executed the JobDetail associated with the Trigger in order to get the final instruction

    code from the trigger.

    TriggerListener.triggerComplete
         Called by the Scheduler when a Trigger has fired, it's associated JobDetail has been executed, and it's triggered(xx)

    method has been called.

    SchedulerListener.triggerFinalized [if(trigger.getNextFireTime() == null)]
         Called by the Scheduler when a Trigger has reached the condition in which it will never fire again.
    主站蜘蛛池模板: 亚洲国产精品综合一区在线| 亚洲成AV人片在线观看无码| 亚洲色图综合在线| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久夜色精品国产亚洲av| 亚洲国产精品无码中文字| 亚洲欧洲国产综合| 亚洲日韩国产二区无码| 永久免费无码日韩视频| 美女视频黄的免费视频网页| 国产精品1024永久免费视频| 国产免费观看网站| 亚洲av无码一区二区三区网站| 亚洲天堂一区在线| 立即播放免费毛片一级| 日本三级在线观看免费| 成人影片麻豆国产影片免费观看 | 蜜臀91精品国产免费观看| heyzo亚洲精品日韩| 亚洲成a人片77777老司机| 亚洲综合一区国产精品| 国产高潮流白浆喷水免费A片 | 最近免费中文字幕mv在线电影| 国产男女猛烈无遮挡免费视频网站| 亚洲一区二区三区无码中文字幕| 亚洲国产美女视频| 亚洲精品视频免费观看| 7723日本高清完整版免费| 免费大片黄手机在线观看| 97久久精品亚洲中文字幕无码| 亚洲国产成人精品无码区二本 | 久久久久久精品免费看SSS | 国产免费69成人精品视频 | 精品国产香蕉伊思人在线在线亚洲一区二区| 国产偷v国产偷v亚洲高清| 亚洲夂夂婷婷色拍WW47| 最近免费字幕中文大全| 热久久精品免费视频| 亚洲成年人在线观看| 免费看黄福利app导航看一下黄色录像| 久久综合国产乱子伦精品免费|