定時任務Quartz
阿新 • • 發佈:2018-12-25
定時任務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);