java任務調度quartz框架的小例子


quartz是一個開源的作業調度框架,當然,java可以使用Timer來實現簡單任務調度的功能,但Timer是單線程的設計方案,使得一個任務延遲會影響到其他的任務。java也可以使用 ScheduledExecutor+ Calendar 使用復雜的調度功能,但是這會相應的增加復雜度,例如計算一個精確到天的時間便要使用時間組合來計算。
quartz與java本身的任務調度相比可以滿足更加復雜的任務調度需求,quartz提供了一個Job、Tigger和 Scheduler設計。
 
作業部分:
一個要被quartz框架調度的作業要實現了Job接口。
一個最簡單的Job實現如下:
package cn.edu.gdut.quartz;
 
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
public class HelloQuartz  implements Job {
 
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println("job test");               
    }       
}

 

 
當然,上面的實現部分可以實現不同的業務,可以在JobExecutionContext 中傳遞參數,也可以通過JobExecutionContext 來獲取一些關於作業調度的一些信息。
定義了相應的Job后,我們就可以將Job加入到一個JobDetail實例中了,Job完成相應業務的工作,JobDetail則保持了與此Job相關的一些信息,例如Job實例名稱,分組,描述,監聽器,數據,是否是有狀態的等待。
 
觸發器部分:
Tigger部分,quartz提供了4個實現和 TriggerUtils工具類,滿足不同的Tigger要求。以 CronTrigger為例,CronTrigger提供了幾個不同的構造方法,可以傳入時間、Job的信息和 cron表達式等,
關於Cron表達式可以猛戳連接 http://biaoming.iteye.com/blog/39532
 
//每5秒調度一次 
String cronExpression="*/5 * * * * ?"; Trigger trigger=new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP,cronExpression);

 

一個簡單的觸發器就完成了,當然,可以選擇更加豐富的日期選項來實現更豐富的觸發時間點。
TriggerUtils工具類也可以完成此任務,用它可以很方便生產一些Trigger
Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);
trigger.setName("cronTrigger");
trigger.setStartTime(new Date());

 

以上是一個簡單的觸發器。
 
調度器部分:
與TriggerUtils類似quartz提供了一個調度器工廠來獲取調度器,獲取到一個調度器后,我們只有JobDetail和Trigger交給調度器就好了
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 對JobDetail和Trigger實例注冊到Schedule實例中
scheduler.scheduleJob(jobDetail, trigger);
 // 啟動調度器
 scheduler.start();
 try {
     // 當前線程等待20秒
     Thread.sleep(20L * 1000L);
  } catch (Exception e) {
            e.printStackTrace();
  }
  // 關閉調度器
  scheduler.shutdown(true);
 

一個作業的調度器完成了。

至於要怎樣調度,那就交給quartz吧。
 


免責聲明!

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



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