<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";
      
       
       
    /**
        *  添加一個定時任務,使用默認的任務組名,觸發(fā)器名,觸發(fā)器組名
        * 
    @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());//任務名,任務組,任務執(zhí)行類
           
    //觸發(fā)器
           CronTrigger  trigger = 
                
    new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發(fā)器名,觸發(fā)器組
           trigger.setCronExpression(time);//觸發(fā)器時間設定
           sched.scheduleJob(jobDetail,trigger);
           
    //啟動
           if(!sched.isShutdown())
              sched.start();
       }

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

       
       
    /**
        * 修改一個任務的觸發(fā)時間(使用默認的任務組名,觸發(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);
           }

       }

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

       }

       
       
    /**
        * 移除一個任務(使用默認的任務組名,觸發(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);//刪除任務
       }

       
       
    /**
        * 移除一個任務
        * 
    @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);//刪除任務
       }

    }


    測試工作類
    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(
    "【系統(tǒng)啟動】");
                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 閱讀(15358) 評論(8)  編輯  收藏 所屬分類: JAVA

    評論

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

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

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

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

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

    asda   回復  更多評論   

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

    樓主好,
    樓主的程序我已試過,在修改時間后,新的時間并沒有馬上有效,而是要等到在舊的時間觸發(fā)后才能在新的時間觸發(fā)任務,我改了一點測試條件:
    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 //還是舊的時間規(guī)則。
    $$$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
    //希望新的時間規(guī)則能立即生效,如果第35秒已過,希望下次觸發(fā)事件是第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

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

    # 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  回復  更多評論   

    主站蜘蛛池模板: 亚洲国产日韩一区高清在线| 亚洲一区综合在线播放| 中国极品美軳免费观看| 亚洲精品国产成人99久久| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲精品制服丝袜四区| **一级毛片免费完整视| 亚洲精华国产精华精华液好用| 亚洲精品无码专区久久同性男| 99热精品在线免费观看| 亚洲精品亚洲人成在线| 亚洲色欲久久久综合网东京热| 黄色免费网站网址| gogo免费在线观看| 国产成人精品日本亚洲网址| 亚洲日本中文字幕天堂网| 啦啦啦完整版免费视频在线观看 | 毛片a级毛片免费播放下载| 9久热这里只有精品免费| 亚洲丝袜中文字幕| 亚洲色婷婷一区二区三区| 成人毛片手机版免费看| 一区二区三区无码视频免费福利| 久久亚洲精品11p| 亚洲第一页在线播放| 中文字幕在线亚洲精品| 免费无码黄网站在线观看| www视频在线观看免费| 久久久精品国产亚洲成人满18免费网站 | 亚洲毛片网址在线观看中文字幕| 欧洲一级毛片免费| 国精产品一区一区三区免费视频 | 国产精品美女午夜爽爽爽免费 | 亚洲国产精品毛片av不卡在线| 免费可以看黄的视频s色| a级毛片无码免费真人久久| 国产精品亚洲片在线花蝴蝶| 亚洲av专区无码观看精品天堂| 亚洲乱码国产一区三区| 亚洲精品亚洲人成在线观看下载| 午夜视频免费观看|