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

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

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

    胖熊熊

    得到多少又失去了什么

    Quartz使用(一)-入門使用

    很久沒有用Quartz了,居然忘記如何使用了,這里趕緊記錄下
    對Quartz就不說明了,直接上代碼
    注:這里使用的是Quartz1.5.2版本(包:quartz-1.5.2.jar)

    簡單的任務管理類


    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管理類
     * 
     * @Description:
     * 
     * @Copyright: 
     * 
    @author zz  2008-10-8 14:19:01
     * 
    @version 1.00.000
     *
     
    */

    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);//刪除任務
       }

    }


    測試工作類
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;

    public class TestJob implements Job {

        
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
            
    // TODO Auto-generated method stub
            System.out.println("★★★★★★★★★★★");
        }


    }

    測試類
    public class QuartzTest {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args) {
            
    // TODO Auto-generated method stub
            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();
            }

        }

    }

    posted on 2008-10-08 15:40 fatbear 閱讀(15356) 評論(8)  編輯  收藏 所屬分類: JAVA

    評論

    # re: Quartz使用(一)-入門使用 2009-04-15 09:13 lynn169

    寫的很好,還有一種情況,如果一個任務修改了,怎么辦,一定要先刪除再重新添加一個任務嗎  回復  更多評論   

    # re: Quartz使用(一)-入門使用 2009-04-15 16:55 fatbear

    @lynn169
    要看此任務執行的內容是如何實現的
    1.任務執行內容是通過編碼實現
    這種情況通過類重載后,需要刪除再重新添加
    2.任務執行內容是通過調用其他實現的(如數據庫存儲過程或web services服務等)
    這種情況是不用刪除再重新添加
      回復  更多評論   

    # re: Quartz使用(一)-入門使用 2009-04-23 18:00 asd

    asda   回復  更多評論   

    # re: Quartz使用(一)-入門使用 2009-04-23 18:12 asd

    樓主好,
    樓主的程序我已試過,在修改時間后,新的時間并沒有馬上有效,而是要等到在舊的時間觸發后才能在新的時間觸發任務,我改了一點測試條件:
    System.out.println("start time");
    QuartzManager.addJob(job_name, job, "0,10,20,30,40,50 * * * * ?");
    Thread.sleep(10000);

    System.out.println("modify time");
    QuartzManager.modifyJobTime(job_name, "5,15,25,35,55,45 * * * * ?");
    結果像這樣:
    start time
    $$$Thu Apr 23 18:03:30 CST 2009
    modify time
    $$$Thu Apr 23 18:03:40 CST 2009 //還是舊的時間規則。
    $$$Thu Apr 23 18:03:45 CST 2009
    $$$Thu Apr 23 18:03:55 CST 2009
    $$$Thu Apr 23 18:04:05 CST 2009

    可我想得到像這樣的結果:
    start time
    $$$Thu Apr 23 18:03:30 CST 2009
    modify time
    $$$Thu Apr 23 18:03:35 CST 2009
    //希望新的時間規則能立即生效,如果第35秒已過,希望下次觸發事件是第45秒
    $$$Thu Apr 23 18:03:45 CST 2009
    $$$Thu Apr 23 18:03:55 CST 2009
    $$$Thu Apr 23 18:04:05 CST 2009
    望樓主賜教,謝謝?這是否是quartz的內部機制?  回復  更多評論   

    # re: Quartz使用(一)-入門使用 2009-09-28 17:27 EricLee

    哥們,你這個代碼,修改時間并沒有發生變化呢,我在測試你的代碼的時候,同時查看數據庫,在修改時間的時候,數據庫一直沒有改變!!!  回復  更多評論   

    # re: Quartz使用(一)-入門使用[未登錄] 2010-01-20 17:02 roger

    確實,modifyJobTime()方法根本就不起作用  回復  更多評論   

    # re: Quartz使用(一)-入門使用[未登錄] 2011-09-08 09:57 zy

    坑爹  回復  更多評論   

    # re: Quartz使用(一)-入門使用 2014-05-17 23:04 zuidaima

    java quartz代碼下載:http://www.zuidaima.com/share/search.htm?key=quartz  回復  更多評論   

    主站蜘蛛池模板: 丝袜捆绑调教视频免费区| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 国产午夜精品久久久久免费视 | 大陆一级毛片免费视频观看| 久久久久久国产精品免费免费男同 | 久久午夜夜伦鲁鲁片免费无码 | 免费在线不卡视频| 日本一区二区三区免费高清| 无码国产精品一区二区免费16 | 亚洲国产精品丝袜在线观看| 免费看的成人yellow视频| 99久久国产热无码精品免费| 99在线在线视频免费视频观看| 西西人体免费视频| 一级黄色免费网站| 黄页网站在线免费观看| 亚洲第一街区偷拍街拍| 亚洲AV无码一区二区三区牛牛| 亚洲欧洲日产国码在线观看| 亚洲综合久久综合激情久久| 亚洲av网址在线观看| 亚洲高清专区日韩精品| 亚洲一区二区三区自拍公司| 久久久久国产成人精品亚洲午夜 | 亚洲中文字幕无码中文字| 亚洲成av人片在线看片| 91亚洲导航深夜福利| 亚洲av无码av制服另类专区| 亚洲国产精品无码专区影院 | 国产美女视频免费观看的网站 | 亚洲成a人片在线播放| 国产一级淫片免费播放电影| 免费国产高清视频| 亚洲精品无码久久毛片| 国产国拍精品亚洲AV片| 亚洲精品乱码久久久久久自慰| 国产亚洲精AA在线观看SEE| 亚洲AV无码一区二区三区系列| 67pao强力打造67194在线午夜亚洲| 久久亚洲精品成人av无码网站| 亚洲精品在线免费观看|