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

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

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

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    java 組件式的任務調度---Quartz

    Posted on 2009-12-13 23:29 Gavin.lee 閱讀(889) 評論(0)  編輯  收藏 所屬分類: SSH2 --Spring

    參考:http://m.tkk7.com/steady/archive/2007/08/02/134017.html
    Quartz 是一個強大的企業級 Schedule 工具,也是目前最好的開源 Schedule 工具。Spring中也集成了quartz的應用
    Job:
    org.quartz.Job是一個接口,只定義了void execute(JobExecutionContext context)throws JobExecutionException;一個方法。當定時任務被觸發后,系統會自動調用實現了該接口的方法。
    Trigger:
    trigger就是觸發器。Quartz有個很好的想法就是分離了任務和任務執行的條件。Trigger就是控制任務執行條件的類,當Trigger認為執行條件滿足的時刻,Trigger會通知相關的Job去執行。分離的好處是:
    1.你可以為某個Job關聯多個Trigger,其中任何一個條件滿足都可以觸發job執行,這樣可以完成一些組合的高級觸發條件
    2.當Trigger失效后(比如:一個永遠都不能滿足的條件),你不必去聲明一個新的job,代替的是你可以為job關聯一個新的Trigger讓job可以繼續執行。
    目前的Quartz實現中,存在兩種Trigger,SimpleTrigger和CronTrigger,SimpleTrigger是簡單觸發器,如從某日到某日,每個一定時間進行一次提醒,在這段時間內進行多少次提醒;CronTrigger是復雜觸發器,用來執行calendar-like的任務,可設定一些復雜的觸發規則,如每年的x月的第y個星期五,或是每個星期天的幾點進行提醒。后面附加一個日常語義與cronTrigger的轉化
    Scheduler:
    Scheduler 是一個計劃集,其中可以包含多個 JobDetail 和 Trigger 組成的計劃任務。
    在Quartz中,我們可以通過
    SchedulerFactory scheduleFactory = new StdSchedulerFactory();
    Scheduler scheduler = scheduleFactory.getScheduler();
    來取得scheduler,通過調用scheduler.start()來啟動quartz。

    具體的詳細應用看(Quartz Job Scheduling Framework 中文版 V0.9.5.chm) 文檔

    任務調度管理類:

    package com.yixun.wap.quartz;

    import java.text.ParseException;
    import org.quartz.CronTrigger;
    import org.quartz.Job;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.Trigger;
    import org.quartz.impl.StdSchedulerFactory;

    /**
     * @Title:Quartz管理類
     
    */

    public class QuartzManager {
        
    private static SchedulerFactory sf = new StdSchedulerFactory();

        
    private static String JOB_GROUP_NAME = "group1";

        
    private static String TRIGGER_GROUP_NAME = "trigger1";

        
    /**
         *  添加一個定時任務,使用默認的任務組名,觸發器名,觸發器組名
         * 
    @param jobName 任務名
         * 
    @param job     任務
         * 
    @param time    時間設置,參考quartz說明文檔
         * 
    @throws SchedulerException
         * 
    @throws ParseException
         
    */

        
    public static void addJob(String jobName, Job job, String time)    throws SchedulerException, ParseException {
            Scheduler sched 
    = sf.getScheduler();
            JobDetail jobDetail 
    = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任務名,任務組,任務執行類
            
    //觸發器
            CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發器名,觸發器組
            trigger.setCronExpression(time);//觸發器時間設定
            sched.scheduleJob(jobDetail, trigger);
            
    //啟動
            if (!sched.isShutdown())
                sched.start();
        }


        
    /**
         * 添加一個定時任務
         * 
    @param jobName 任務名
         * 
    @param jobGroupName 任務組名
         * 
    @param triggerName  觸發器名
         * 
    @param triggerGroupName 觸發器組名
         * 
    @param job     任務
         * 
    @param time    時間設置,參考quartz說明文檔
         * 
    @throws SchedulerException
         * 
    @throws ParseException
         
    */

        
    public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Job job, String time) throws SchedulerException, ParseException {
            Scheduler sched 
    = sf.getScheduler();
            JobDetail jobDetail 
    = new JobDetail(jobName, jobGroupName, job.getClass());//任務名,任務組,任務執行類
            
    //觸發器
            CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);//觸發器名,觸發器組
            trigger.setCronExpression(time);//觸發器時間設定
            sched.scheduleJob(jobDetail, trigger);
            
    if (!sched.isShutdown())
                sched.start();
        }


        
    /**
         * 修改一個任務的觸發時間(使用默認的任務組名,觸發器名,觸發器組名)
         * 
    @param jobName
         * 
    @param time
         * 
    @throws SchedulerException
         * 
    @throws ParseException
         
    */

        
    public static void modifyJobTime(String jobName, String time) throws SchedulerException, ParseException {
            Scheduler sched 
    = sf.getScheduler();
            Trigger trigger 
    = sched.getTrigger(jobName, TRIGGER_GROUP_NAME);
            
    if (trigger != null{
                CronTrigger ct 
    = (CronTrigger) trigger;
                ct.setCronExpression(time);
                sched.resumeTrigger(jobName, TRIGGER_GROUP_NAME);
            }

        }


        
    /**
         * 修改一個任務的觸發時間
         * 
    @param triggerName
         * 
    @param triggerGroupName
         * 
    @param time
         * 
    @throws SchedulerException
         * 
    @throws ParseException
         
    */

        
    public static void modifyJobTime(String triggerName, String triggerGroupName, String time) throws SchedulerException, ParseException {
            Scheduler sched 
    = sf.getScheduler();
            Trigger trigger 
    = sched.getTrigger(triggerName, triggerGroupName);
            
    if (trigger != null{
                CronTrigger ct 
    = (CronTrigger) trigger;
                
    //修改時間
                ct.setCronExpression(time);
                
    //重啟觸發器
                sched.resumeTrigger(triggerName, triggerGroupName);
            }

        }


        
    /**
         * 移除一個任務(使用默認的任務組名,觸發器名,觸發器組名)
         * 
    @param jobName
         * 
    @throws SchedulerException
         
    */

        
    public static void removeJob(String jobName) throws SchedulerException {
            Scheduler sched 
    = sf.getScheduler();
            sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);
    //停止觸發器
            sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);//移除觸發器
            sched.deleteJob(jobName, JOB_GROUP_NAME);//刪除任務
        }


        
    /**
         * 移除一個任務
         * 
    @param jobName
         * 
    @param jobGroupName
         * 
    @param triggerName
         * 
    @param triggerGroupName
         * 
    @throws SchedulerException
         
    */

        
    public static void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) throws SchedulerException {
            Scheduler sched 
    = sf.getScheduler();
            sched.pauseTrigger(triggerName, triggerGroupName);
    //停止觸發器
            sched.unscheduleJob(triggerName, triggerGroupName);//移除觸發器
            sched.deleteJob(jobName, jobGroupName);//刪除任務
        }

    }


    具體任務調度:
    package com.yixun.wap.quartz;

    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;

    public class TestJob implements Job {
        
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
            System.out.println(
    "★★★★★★★★★★★");
        }


    }

    任務調用測試:
    package com.yixun.wap.quartz;

    public class QuartzTest {

        
    public static void main(String[] args) {
            TestJob job 
    = new TestJob();
            String job_name 
    = "11";
            
    try {
                System.out.println(
    "【系統啟動】");
                QuartzManager.addJob(job_name, job, 
    "0/5 * * * * ?");
                Thread.sleep(
    10000);
                
                System.out.println(
    "【修改時間】");
                QuartzManager.modifyJobTime(job_name, 
    "0/10 * * * * ?");            
                Thread.sleep(
    20000);
                
                System.out.println(
    "【移除定時】");
                QuartzManager.removeJob(job_name);
                Thread.sleep(
    10000);

                System.out.println(
    "\n【添加定時任務】");
                QuartzManager.addJob(job_name, job, 
    "0/5 * * * * ?");

            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

    主站蜘蛛池模板: 亚洲日韩国产精品乱| 亚洲成综合人影院在院播放| 国产三级在线免费| 亚洲成a人片在线观看中文app| 噜噜嘿在线视频免费观看| 乱人伦中文视频在线观看免费| 亚洲AV日韩AV天堂一区二区三区 | 亚洲精品卡2卡3卡4卡5卡区| 久草免费在线观看视频| 国产亚洲福利一区二区免费看| 国产成A人亚洲精V品无码| 好爽…又高潮了免费毛片| 免费看一区二区三区四区| 亚洲偷偷自拍高清| 亚洲人成无码网站| 成年女人18级毛片毛片免费观看| 国产精品免费αv视频| 久久精品国产亚洲av麻豆图片 | 亚洲中文字幕乱码一区| 国产成人亚洲精品91专区手机| 免费国产作爱视频网站| 国产久爱免费精品视频 | 亚洲香蕉成人AV网站在线观看| 免免费国产AAAAA片| 中文字幕免费在线看| 亚洲高清毛片一区二区| 337p日本欧洲亚洲大胆色噜噜 | 亚洲欧洲日产韩国在线| 久久亚洲国产成人影院网站| 性感美女视频免费网站午夜| 日韩人妻无码精品久久免费一| 特级毛片aaaa免费观看 | 91成人免费在线视频| 国产一区二区三区免费观看在线| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲熟妇无码爱v在线观看| 亚洲精品无码午夜福利中文字幕| 四虎影在线永久免费四虎地址8848aa| 国产免费的野战视频| 国产精品免费看久久久 | 精品免费久久久久久成人影院|