自己在網上了解了Quartz框架,寫了個例子
1、Quartz介紹
Quartz 是一個開源的作業調度框架,它完全由 Java 寫成,並設計用於 J2SE 和 J2EE 應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來爲執行一個作業而創建簡單的或複雜的調度。
2、任務調度實現方式比較
Timer:基於開始時間與重複間隔的任務調度(單線程執行)
Scheduler:基於開始時間與重複間隔的任務調度(多線程執行)
Quartz :實現複雜的任務調度。
3、下載(官網下載最新版本Quartz 2.2.1)
http://www.quartz-scheduler.org/downloads
4、體系結構
Quartz對任務調度的領域問題進行了高度的抽象,提出了調度器、任務和觸發器這3個核心的概念,並在org.quartz通過接口和類對重要的這些核心概念進行描述
概念:
scheduler:
任務調度器
trigger:
觸發器,用於定義任務調度時間規則
job:
任務,即被調度的任務。作業是能夠調度的可執行任務,實現org.quartz.Job接口即可。
一個job 可以被多個 trigger 關聯,但是一個 trigger 只能關聯一個 job。
5、例子
public classHelloJob implements Job {
@Override
publicvoid execute(JobExecutionContext context) throws JobExecutionException {
//TODO Auto-generated method stub
System.out.println("執行Job時間:"+ new Date());
}
}
import job.HelloJob;
importorg.quartz.DateBuilder;
importorg.quartz.JobBuilder;
importorg.quartz.JobDetail;
importorg.quartz.Scheduler;
importorg.quartz.SchedulerException;
importorg.quartz.SimpleScheduleBuilder;
importorg.quartz.Trigger;
importorg.quartz.TriggerBuilder;
importorg.quartz.TriggerKey;
importorg.quartz.impl.StdSchedulerFactory;
public classSimpleExample {
public void run() throws Exception {
try {
/*通過SchedulerFactory來獲取一個調度器;STD:standard標準的意思 */
Scheduler scheduler =StdSchedulerFactory.getDefaultScheduler();
/* 作業、任務 */
JobDetail job =JobBuilder.newJob(HelloJob.class).withIdentity("myJobName","myJobGroup").build();
/* 觸發器 */
Trigger trigger =TriggerBuilder.newTrigger()
.withIdentity(TriggerKey.triggerKey("myTrigger","myTriggerGroup"))
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(10))
.startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND))
.build();
scheduler.scheduleJob(job,trigger);
scheduler.start();
Thread.sleep(60*1000);
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception {
SimpleExample example = newSimpleExample();
example.run();
}
}