Trigger是quartz中设置定时的接口,该接口两个比较常用的实现接口SimpleTrigger和CronTrigger。
SimpleTrigger接口的作用:在一个指定的时间段内执行一次作业任务或是在指定时间间隔内多次执行作业任务。
示例用法
首先创建一个Job任务,任务只是简单的打印
public class HelloJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sf.format(new Date());
System.out.println("execute job Time : " + sf.format(new Date()));
System.out.println("------------------------------------------");
}
}
1、在距当前时间3s后只执行一次任务
public class TestHelloJob
{
public static void main( String[] args ) throws SchedulerException
{
/*创建JobDetail实例,并与HelloJob绑定;Job的名字是myjob,隶属于job_group组*/
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myjob", "job_group")
.build();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("current time : " + sf.format(new Date()));
Date startTime = new Date();
startTime.setTime(startTime.getTime() + 3000);
/*创建Trriger实例,在距当前3s后执行一次任务*/
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "trigger_group")
.startAt(startTime)
.build();
/*创建SchedulerFactory实例,把jobDetail与trigger绑定在一起*/
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
执行任务,输出:
current time : 2018-04-05 11:53:00
……
execute job Time : 2018-04-05 11:53:03
2、距当前时间3s后执行任务,以后每隔2s时间执行一次任务
public class TestHelloJob {
public static void main(String[] args) throws SchedulerException {
/* 创建JobDetail实例,并与HelloJob绑定;Job的名字是myjob,隶属于job_group组 */
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myjob", "job_group").build();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("current time : " + sf.format(new Date()));
Date startTime = new Date();
startTime.setTime(startTime.getTime() + 3000);
/* 创建Trriger实例,距当前时间3s后执行任务,以后每隔2s时间执行一次任务 */
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "trigger_group")
.startAt(startTime)
.withSchedule(SimpleScheduleBuilder
.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)) //无限循环,也可以设置循环次数
.build();
/* 创建SchedulerFactory实例,把jobDetail与trigger绑定在一起 */
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
运行任务,输出:
current time : 2018-04-05 15:37:34
……
execute job Time : 2018-04-05 15:37:37
------------------------------------------
execute job Time : 2018-04-05 15:37:39
------------------------------------------
……循环
3、距当前时间3s后开始执行,距当前时间10s后结束执行
public class TestHelloJob {
public static void main(String[] args) throws SchedulerException {
/* 创建JobDetail实例,并与HelloJob绑定;Job的名字是myjob,隶属于job_group组 */
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myjob", "job_group").build();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("current time : " + sf.format(new Date()));
Date startTime = new Date();
Date endTime = new Date();
startTime.setTime(startTime.getTime() + 3000);
endTime.setTime(endTime.getTime() + 10000);
/* 创建Trriger实例,距当前时间3s后开始执行,距当前时间10s后结束执行 */
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "trigger_group")
.startAt(startTime)
.endAt(endTime)
.withSchedule(SimpleScheduleBuilder
.simpleSchedule().withIntervalInSeconds(3)
.withRepeatCount(5)) //如果到了结束时间,还没有执行完指定的次数,也结束任务
.build();
/* 创建SchedulerFactory实例,把jobDetail与trigger绑定在一起 */
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
运行任务,输出:
current time : 2018-04-05 15:57:45
execute job Time : 2018-04-05 15:57:48
------------------------------------------
execute job Time : 2018-04-05 15:57:51
------------------------------------------
execute job Time : 2018-04-05 15:57:54
------------------------------------------
只执行了3次job作业