1. 程式人生 > >定時任務Quartz

定時任務Quartz

定時任務Quartz

簡介

Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源專案,它可以與J2EE與J2SE應用程式相結合也可以單獨使用。Quartz可以用來建立簡單或為執行十個,百個,甚至是好幾萬個Jobs這樣複雜的程式。Jobs可以做成標準的Java元件或 EJBs。Quartz的最新版本為Quartz 2.3.0

匯入Jar

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

物件

排程物件

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler sched = schedulerFactory.getScheduler();

自定義任務類

//實現Job介面,並重寫execute方法
public class TestJob implements Job{
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //業務程式碼...
    }
}

任務明細

 // 指定任務類,任務名,任務組
JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();

// 通過調動物件獲取任務明細
JobDetail detail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));

觸發器

// 觸發器
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
// 觸發器名,觸發器組
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();
// 觸發器時間設定,指定Cron表示式
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
// 建立Trigger物件
CronTrigger trigger = (CronTrigger) triggerBuilder.build();

//通過調動物件獲取觸發器
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);

執行和關閉

①執行指定任務

 // 指定任務和觸發器
 sched.scheduleJob(jobDetail, trigger);
 // 執行
 if (!sched.isShutdown()) {
     sched.start();
 }   

②執行全部任務

Scheduler sched = schedulerFactory.getScheduler();
sched.start();

③關閉全部任務

Scheduler sched = schedulerFactory.getScheduler();
 if (!sched.isShutdown()) {
     sched.shutdown();
 }

刪除任務

  Scheduler sched = schedulerFactory.getScheduler();
  TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
  sched.pauseTrigger(triggerKey);// 暫停觸發器
  sched.unscheduleJob(triggerKey);// 移除觸發器
  sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 刪除任務

暫停任務

 Scheduler scheduler = schedulerFactory.getScheduler();
 JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
 scheduler.pauseJob(jobKey);

恢復任務

 Scheduler scheduler = schedulerFactory.getScheduler();
 JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
 scheduler.resumeJob(jobKey);