quartz---java計划任務 quartz-all-1.8.5.jar


  Quartz是一個功能強大的java計划任務系統,它通過簡單的配置和代碼完成各種計划人數,定時單機應用到分布式的計算機間遠程任務調度,都可以做到。      quartz是一個按照設定的時間規則來調度作業的調度器,比如可以設定每30s啟動一個Job,但如果Job在30s內還未完成,那么quartz默認情況下還是按照設定的周期啟動新的Job線程      今天剛看了一點資料,做一下筆記。      地址:http://www.opensymphony.com/quartz/       例子:

Java代碼 復制代碼 收藏代碼
  1.        
  2. import java.util.ArrayList; 
  3. import java.util.Date; 
  4.  
  5. import org.quartz.JobDetail; 
  6. import org.quartz.Scheduler; 
  7. import org.quartz.SchedulerException; 
  8. import org.quartz.SchedulerFactory; 
  9. import org.quartz.Trigger; 
  10. import org.quartz.TriggerUtils; 
  11. import org.quartz.impl.StdSchedulerFactory; 
  12.  
  13. publicclass TimerTest { 
  14.  
  15.     publicstaticvoid main(String... strings) { 
  16.         SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); 
  17.  
  18.         Scheduler sched; 
  19.         try
  20.  
  21.             // sched = schedFact.getScheduler(); 
  22.             sched = StdSchedulerFactory.getDefaultScheduler(); 
  23.  
  24.             JobDetail jobDetail = new JobDetail("myJob", // job name 
  25.                                                 sched.DEFAULT_GROUP, // job group (you can also specify 'null' to 
  26.                                                 // use the default group) 
  27.                                                 TestJob.class); // the java class to execute 
  28.  
  29.             jobDetail.getJobDataMap().put("jobSays", "Hello World!"); 
  30.             jobDetail.getJobDataMap().put("myFloatValue", 3.141f); 
  31.             jobDetail.getJobDataMap().put("myStateData", new ArrayList()); 
  32.  
  33.             Trigger trigger = TriggerUtils.makeDailyTrigger(0, 1); 
  34.             trigger.setStartTime(new Date()); 
  35.             trigger.setName("myTrigger"); 
  36.  
  37. //Add the given JobDetail to the Scheduler,  
  38. //and associate the given Trigger with it. 
  39.             sched.scheduleJob(jobDetail, trigger);             sched.start(); 
  40.             // sched.shutdown(); 
  41.  
  42.         } catch (SchedulerException e) { 
  43.             // TODO Auto-generated catch block 
  44.             e.printStackTrace(); 
  45.         } 
  46.     } 
      
import java.util.ArrayList;
import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

public class TimerTest {

    public static void main(String... strings) {
        SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

        Scheduler sched;
        try {

            // sched = schedFact.getScheduler();
            sched = StdSchedulerFactory.getDefaultScheduler();

            JobDetail jobDetail = new JobDetail("myJob", // job name
                                                sched.DEFAULT_GROUP, // job group (you can also specify 'null' to
                                                // use the default group)
                                                TestJob.class); // the java class to execute

            jobDetail.getJobDataMap().put("jobSays", "Hello World!");
            jobDetail.getJobDataMap().put("myFloatValue", 3.141f);
            jobDetail.getJobDataMap().put("myStateData", new ArrayList());

            Trigger trigger = TriggerUtils.makeDailyTrigger(0, 1);
            trigger.setStartTime(new Date());
            trigger.setName("myTrigger");

//Add the given JobDetail to the Scheduler, 
//and associate the given Trigger with it.
            sched.scheduleJob(jobDetail, trigger);             sched.start();
            // sched.shutdown();

        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Java代碼 復制代碼 收藏代碼
  1. import java.util.ArrayList; 
  2. import java.util.Date; 
  3.  
  4. import org.quartz.Job; 
  5. import org.quartz.JobDataMap; 
  6. import org.quartz.JobExecutionContext; 
  7. import org.quartz.JobExecutionException; 
  8.  
  9. publicclass TestJob implements Job { 
  10.  
  11.     publicvoid execute(JobExecutionContext context) throws JobExecutionException { 
  12.         // TODO Auto-generated method stub 
  13.         System.out.println("........................................"); 
  14.         String instName = context.getJobDetail().getName(); 
  15.         String instGroup = context.getJobDetail().getGroup(); 
  16.  
  17.         JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 
  18.  
  19.         String jobSays = dataMap.getString("jobSays"); 
  20.         float myFloatValue = dataMap.getFloat("myFloatValue"); 
  21.         ArrayList state = (ArrayList) dataMap.get("myStateData"); 
  22.         state.add(new Date()); 
  23.  
  24.         System.out.println("Instance " + instName + " of DumbJob says: " + jobSays); 
  25.     } 
  26.  
import java.util.ArrayList;
import java.util.Date;

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

public class TestJob implements Job {

    public void execute(JobExecutionContext context) throws JobExecutionException {
        // TODO Auto-generated method stub
        System.out.println("........................................");
        String instName = context.getJobDetail().getName();
        String instGroup = context.getJobDetail().getGroup();

        JobDataMap dataMap = context.getJobDetail().getJobDataMap();

        String jobSays = dataMap.getString("jobSays");
        float myFloatValue = dataMap.getFloat("myFloatValue");
        ArrayList state = (ArrayList) dataMap.get("myStateData");
        state.add(new Date());

        System.out.println("Instance " + instName + " of DumbJob says: " + jobSays);
    }

}

運行結果如同http://www.opensymphony.com/quartz/wikidocs/QuickStart.html所說的,顯示了一堆紅色的信息,說明程序讀取了默認的Quartz配置,同時已經啟動了。     問題1:TestJob 中定義的一些輸出信息怎么什么都沒有呢,定義了1分鍾,但是沒有輸出?    仔細看了例子代碼,發現居然范了一個低級錯誤,使用了makeDailyTrigger,該方法是定時,每天幾點幾分進行計划任務,修改為

Java代碼 復制代碼 收藏代碼
  1. Trigger trigger = TriggerUtils.makeSecondlyTrigger(3); 
Trigger trigger = TriggerUtils.makeSecondlyTrigger(3);

     之后沒三秒鍾就打印:

Java代碼 復制代碼 收藏代碼
  1. ........................................ 
  2. ance myJob of DumbJob says: Hello World! 
    ........................................
Instance myJob of DumbJob says: Hello World!

     TriggerUtils內還有很多其他有用的方法,看quartz API
再增加一個JOB,只需要增加一個job類,jobDetail,Trigger兩對象,調用scheduleJob方法就可以加入調度隊列了。        這只是一個簡單的例子,quartz還有很復雜的功能,繼續學習。

引用

分享到:     
評論
5 樓    hacker_zxf    2012-04-09           
最近再去看quartz實現,job都是new出來的,如果需要自定義job或者干一些私密的事情,可以自定義jobFactory ,塞如scheduler中,  還是很強大的, 可惜擴展新不是非常好,而且版本兼容也不好。
4 樓    hacker_zxf    2012-04-09           
quartz 的擴展型做的不好,本來試圖將表達式擴展成支持毫秒,但是他的實現默認是每個1秒鍾運行一次,判斷是否滿足時間表達式, 且這個1秒是內部寫死,無法擴展,  要做,只能自己寫整套的,  悲劇,最后只能選擇毫秒用另一個參數了。
3 樓    piaoxue_x    2011-12-01           
嗯,看看。。。。貌似不錯,謝謝了。。。
2 樓    673341766    2011-10-14           
麻煩你看一下  紅色的信息是報錯好吧.
1 樓    linsea    2009-03-17           
自定一個時間表如第每天1點,3點,8點,20點,23:30點等一些時間點,Quartz 是否能按照這個時間表執行同一個計算任務?而且這個時間表是可以隨時更改配置更新的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM