上一篇咱們整理學(xué)習(xí)了Java調(diào)度框架Quartz的1+版本耳标,這才咱們看一下Quartz的2+版本和2以下版本的有什么區(qū)別逢勾。無(wú)非就是幾個(gè)步驟,1.創(chuàng)建調(diào)度器粉铐,2.創(chuàng)建作業(yè)任務(wù)疼约,3.創(chuàng)建觸發(fā)器并設(shè)置觸發(fā)器的出發(fā)執(zhí)行規(guī)則,4.開(kāi)始調(diào)度蝙泼。那么Quartz 2版本有什么區(qū)別呢程剥,直接上代碼直接一點(diǎn):
還是那幾步,我就不一一羅列了汤踏。
首先是Job作業(yè)的任務(wù)邏輯:實(shí)現(xiàn)Job interface
package com.traning.quartz.quartz2_1_7;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by luyang.li on 17/2/8.
*/
public class QuartzTestJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "Quartz 2.1.7 Test");
}
}
具體的任務(wù):
package com.traning.quartz.quartz2_1_7;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
/**
* Created by luyang.li on 17/2/13.
*/
public class QuartzTestApp {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//獲取 調(diào)度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//獲取 任務(wù)作業(yè)
JobDetail jobDetail = newJob(QuartzTestJob.class).withIdentity("groupJobName", "group1").build();
//獲取 觸發(fā)器
Trigger trigger = newTrigger().withIdentity("triggerName", "group1").startNow().build();
//綁定
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
Thread.sleep(10);
scheduler.shutdown();
}
}
咱們直接執(zhí)行這個(gè)方法就可以看見(jiàn)任務(wù)執(zhí)行了织鲸,為什么要調(diào)用這個(gè)
scheduler.shutdown();
方法呢,應(yīng)為Quartz任務(wù)在執(zhí)行的時(shí)候不會(huì)顯示關(guān)閉任務(wù),就算主線(xiàn)程執(zhí)行完畢了溪胶,任務(wù)還是在執(zhí)行中搂擦,咱們就直接調(diào)用shutdown關(guān)閉。
咱們看一下兩者的區(qū)別就是創(chuàng)建任務(wù)和觸發(fā)器的時(shí)候使用的方式不同了在構(gòu)造作業(yè)和觸發(fā)器的時(shí)候都是構(gòu)造他的 組 和 名哗脖,只是使用了不同的方式瀑踢。來(lái)看一下源碼:
public Key(String name, String group) {
if(name == null)
throw new IllegalArgumentException("Name cannot be null.");
this.name = name;
if(group != null)
this.group = group;
else
this.group = DEFAULT_GROUP;
}
其實(shí)和1+版本的作用都是一樣的,構(gòu)造作業(yè)的時(shí)候是綁定作業(yè)的類(lèi)才避,然后構(gòu)造 組 + 名橱夭,構(gòu)造觸發(fā)器的手也是同樣的構(gòu)造觸發(fā)器的 組 + 名。
大家可以執(zhí)行以下看一下結(jié)果桑逝,我就不貼結(jié)果了棘劣。
下面咱們看一下2+版本的SimpleTrigger的構(gòu)造器的使用:SimpleTrigger上一節(jié)咱們說(shuō)是簡(jiǎn)單的構(gòu)造器執(zhí)行方式
1.和1版本一樣來(lái)看下這個(gè)方法:
public SimpleScheduleBuilder withIntervalInMinutes(int intervalInMinutes)
這個(gè)方法就是設(shè)置執(zhí)行的間隔,參數(shù)是一個(gè)int值楞遏,再看下他的源碼:
public SimpleScheduleBuilder withIntervalInMinutes(int intervalInMinutes) {
this.interval = intervalInMinutes * DateBuilder.MILLISECONDS_IN_MINUTE;
return this;
}
這個(gè)常量是:
public static final long MILLISECONDS_IN_MINUTE = 60l * 1000l;
我們可以看出來(lái)是單位是分鐘2缦尽J孜簟!好了有執(zhí)行間隔了糙俗,執(zhí)行次數(shù)呢:
還有一個(gè)函數(shù)是設(shè)置執(zhí)行次數(shù):
public SimpleScheduleBuilder withRepeatCount(int triggerRepeatCount) {
this.repeatCount = triggerRepeatCount;
return this;
}
這個(gè)函數(shù)就是設(shè)置執(zhí)行次數(shù)沙廉。
好了直接看下整體的代碼:
package com.traning.quartz.quartz2_1_7;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
/**
* Created by luyang.li on 17/2/13.
*/
public class QuartzTestApp {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//獲取 調(diào)度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//獲取 任務(wù)作業(yè)
JobDetail jobDetail = newJob(QuartzTestJob.class).withIdentity("groupJobName", "group1").build();
//獲取 觸發(fā)器 !!!!!!
Trigger trigger = newTrigger().withSchedule(simpleSchedule()
.withIntervalInMinutes(1) // 1分鐘
.withRepeatCount(20)) // 重復(fù)20次
.startNow()
.build();
//綁定
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}
這里我把關(guān)閉方法去掉了,因?yàn)槿蝿?wù)要執(zhí)行20次臼节,不然要睡眠等到任務(wù)結(jié)束才可以調(diào)用關(guān)閉撬陵,大家自己執(zhí)行下看看效果。
怎么樣簡(jiǎn)單吧网缝。好了下一節(jié)咱們看下 1+ 版本和 2+版本的CronTrigger的使用巨税。