<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

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

    任務(wù)調(diào)度管理類:

    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";

        
    /**
         *  添加一個(gè)定時(shí)任務(wù),使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名
         * 
    @param jobName 任務(wù)名
         * 
    @param job     任務(wù)
         * 
    @param time    時(shí)間設(shè)置,參考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());//任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類
            
    //觸發(fā)器
            CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發(fā)器名,觸發(fā)器組
            trigger.setCronExpression(time);//觸發(fā)器時(shí)間設(shè)定
            sched.scheduleJob(jobDetail, trigger);
            
    //啟動(dòng)
            if (!sched.isShutdown())
                sched.start();
        }


        
    /**
         * 添加一個(gè)定時(shí)任務(wù)
         * 
    @param jobName 任務(wù)名
         * 
    @param jobGroupName 任務(wù)組名
         * 
    @param triggerName  觸發(fā)器名
         * 
    @param triggerGroupName 觸發(fā)器組名
         * 
    @param job     任務(wù)
         * 
    @param time    時(shí)間設(shè)置,參考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());//任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類
            
    //觸發(fā)器
            CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);//觸發(fā)器名,觸發(fā)器組
            trigger.setCronExpression(time);//觸發(fā)器時(shí)間設(shè)定
            sched.scheduleJob(jobDetail, trigger);
            
    if (!sched.isShutdown())
                sched.start();
        }


        
    /**
         * 修改一個(gè)任務(wù)的觸發(fā)時(shí)間(使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名)
         * 
    @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);
            }

        }


        
    /**
         * 修改一個(gè)任務(wù)的觸發(fā)時(shí)間
         * 
    @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;
                
    //修改時(shí)間
                ct.setCronExpression(time);
                
    //重啟觸發(fā)器
                sched.resumeTrigger(triggerName, triggerGroupName);
            }

        }


        
    /**
         * 移除一個(gè)任務(wù)(使用默認(rèn)的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名)
         * 
    @param jobName
         * 
    @throws SchedulerException
         
    */

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


        
    /**
         * 移除一個(gè)任務(wù)
         * 
    @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);
    //停止觸發(fā)器
            sched.unscheduleJob(triggerName, triggerGroupName);//移除觸發(fā)器
            sched.deleteJob(jobName, jobGroupName);//刪除任務(wù)
        }

    }


    具體任務(wù)調(diào)度:
    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(
    "★★★★★★★★★★★");
        }


    }

    任務(wù)調(diào)用測試:
    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(
    "【系統(tǒng)啟動(dòng)】");
                QuartzManager.addJob(job_name, job, 
    "0/5 * * * * ?");
                Thread.sleep(
    10000);
                
                System.out.println(
    "【修改時(shí)間】");
                QuartzManager.modifyJobTime(job_name, 
    "0/10 * * * * ?");            
                Thread.sleep(
    20000);
                
                System.out.println(
    "【移除定時(shí)】");
                QuartzManager.removeJob(job_name);
                Thread.sleep(
    10000);

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

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

        }

    }

    主站蜘蛛池模板: 亚洲中文字幕人成乱码| 国产亚洲综合色就色| 免费又黄又爽又猛的毛片| 亚洲 另类 无码 在线| 亚洲午夜久久久影院| 亚洲人成网站在线播放影院在线 | 狠狠亚洲婷婷综合色香五月排名| 亚洲色自偷自拍另类小说| 亚洲综合精品一二三区在线| 激情五月亚洲色图| 免费看内射乌克兰女| 免费人成黄页在线观看日本| 7723日本高清完整版免费| 国产免费看插插插视频| 国产亚洲综合一区柠檬导航| 激情综合亚洲色婷婷五月APP| 亚洲AV成人片无码网站| a在线观看免费网址大全| 无码乱肉视频免费大全合集| 亚洲高清成人一区二区三区| 亚洲精品综合一二三区在线| 亚洲国产精品无码久久久秋霞1| 久久国产精品免费一区| 在线永久看片免费的视频| 亚洲av片一区二区三区| 亚洲美女视频免费| 爱情岛论坛免费视频| 9277手机在线视频观看免费| 成在线人永久免费视频播放| 亚洲av日韩av天堂影片精品| 亚洲另类自拍丝袜第五页| 国产一精品一av一免费爽爽| 在线观看免费为成年视频| 亚洲成a人片在线观看无码专区| 亚洲AV日韩综合一区尤物| 两个人看的www免费视频| 成人男女网18免费视频| 亚洲中文字幕日产乱码高清app | 亚洲av无码成人影院一区| 国产精品网站在线观看免费传媒| 四虎成人免费大片在线|