Quartz的SimpleTrigger
一 點睛
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