一 点睛
1 SimpleTrigger的作用
在一个指定的时间段内执行一次作业任务。
或是在指定的时间间隔内多次执行作业任务。
2 需要注意的点
- 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY 常量值
- 重复执行间隔必须为0或长整数
- 一旦被指定了endTime参数,那么它就会覆盖重复次数参数的效果
二 实战——距离当前的时间4秒钟后执行且仅执行一次任务
1 启动类
package com.quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloScheduler {
public static void main( String[] args ) throws SchedulerException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Time is:" + simpleDateFormat.format(date));
//创建一个JobDetail实例, 将该实例与hellojob class 绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob").build(); //演示传递参数
//获取距离当前时间4秒钟之后的时间
date.setTime(date.getTime()+4000);
//距离当前的时间4秒钟后执行且仅执行一次任务
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.startAt(date)
.build();
//创建Schedule实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
2 Job类
package com.quartz;
import org.quartz.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloJob implements Job{
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//打印当前执行的时间
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("+++++++++++++++++++++++++++");
System.out.println("Current Exec Time is:" + simpleDateFormat.format(date));
System.out.println("Hello world");
}
}
3 执行结果
Current Time is:2018-11-17 10:07:29
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:07:33
Hello world
三 实战——距离当前的时间4秒钟首次执行任务,之后每隔两秒重复执行一次任务,重复三次
1 启动类
package com.quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloScheduler {
public static void main( String[] args ) throws SchedulerException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Time is:" + simpleDateFormat.format(date));
//创建一个JobDetail实例, 将该实例与hellojob class 绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob").build(); //演示传递参数
//获取距离当前时间4秒钟之后的时间
date.setTime(date.getTime() + 4000);
//距离当前的时间4秒钟首次执行任务,之后每隔两秒重复执行一次任务,重复三次
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.startAt(date)
.withSchedule(
SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2)
.withRepeatCount(3 //重复三次
//SimpleTrigger.REPEAT_INDEFINITELY //重复无限次
))
.build();
//创建Schedule实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
2 执行结果
Current Time is:2018-11-17 10:17:45
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:17:49
Hello world
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:17:51
Hello world
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:17:53
Hello world
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:17:55
Hello world
四 实战——距离当前的时间4秒钟首次执行任务,之后每隔两秒重复执行一次任务,重复三次,直到距离当前时间6秒之后为止
1 启动类
package com.quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloScheduler {
public static void main( String[] args ) throws SchedulerException {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Time is:" + simpleDateFormat.format(date));
//创建一个JobDetail实例, 将该实例与hellojob class 绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob").build(); //演示传递参数
//获取距离当前时间4秒钟之后的时间
date.setTime(date.getTime() + 4000);
//获取距离当前时间6秒钟之后的时间
Date endDate= new Date();
endDate.setTime((endDate.getTime()+6000));
//距离当前的时间4秒钟首次执行任务,之后每隔两秒重复执行一次任务,重复三次
//直到距离当前时间6秒之后为止
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.startAt(date)
.endAt(endDate) //endAt优先于withRepeatCount
.withSchedule(
SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2)
.withRepeatCount(3 //重复三次
//SimpleTrigger.REPEAT_INDEFINITELY //重复无限次
))
.build();
//创建Schedule实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
2 测试结果
Current Time is:2018-11-17 10:22:30
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:22:34
Hello world
+++++++++++++++++++++++++++
Current Exec Time is:2018-11-17 10:22:36
Hello world