Quartz主要用来执行定时任务
Quartz主要由3部分组成:
-
JobDetail:任务(需要执行的任务)
-
Trigger:触发器(满足条件触发,触发后调用任务)
-
Scheduler:调度器(将触发器和任务相关联)
Quartz的使用
-
导入相关依赖
<!-- Quartz的依赖项 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency>
-
创建需要执行的业务逻辑类
/** *具体要执行的业务逻辑类,需要实现Job接口 */ public class PrintWordsJob implements Job{ @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //设置在控制台上输出的时间 String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); System.out.println("PrintWordsJob开始于:" + format + ",输出:Hello Job - " + new Random().nextInt(100)); } }
-
创建Scheduler(调度器)
public class MyScheduler { public static void main(String[] args) throws SchedulerException { //创建调度器Scheduler SchedulerFactory SchedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = SchedulerFactory.getScheduler(); } }
-
创建JobDetail(任务)
public class MyScheduler { public static void main(String[] args) throws SchedulerException { //创建调度器Scheduler SchedulerFactory SchedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = SchedulerFactory.getScheduler(); //创建任务实例JobDetail,并于PrintWordsJob类绑定 JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class) .withIdentity("job1", "group1") //定义任务名称和组名称 .build(); } }
-
创建Trigger(调度器)
public class MyScheduler { public static void main(String[] args) throws SchedulerException { //创建调度器Scheduler SchedulerFactory SchedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = SchedulerFactory.getScheduler(); //创建任务实例JobDetail,并于PrintWordsJob类绑定 JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class) .withIdentity("job1", "group1") //定义任务名称和组名称 .build(); //定义触发器开始时间 Date startDate = new Date(); startDate.setTime(startDate.getTime()); //定义触发器结束时间 Date endDate = new Date(); endDate.setTime(startDate.getTime() + 5000 * 10); //创建触发器Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "triggerGroup1") .startNow() //立即执行 .startAt(startDate) //触发器触发后startDate秒开始 .endAt(endDate) //触发器开始后endDate秒结束 .withSchedule( //指定调度策略 SimpleScheduleBuilder.simpleSchedule() //调度对象 .withIntervalInSeconds(1) //每隔1s执行一次 .repeatForever()) //永久执行 .build(); } }
-
Scheduler执行
public class MyScheduler { public static void main(String[] args) throws SchedulerException { //创建调度器Scheduler SchedulerFactory SchedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = SchedulerFactory.getScheduler(); //创建任务实例JobDetail,并于PrintWordsJob类绑定 JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class) .withIdentity("job1", "group1") //定义任务名称和组名称 .build(); //定义触发器开始时间 Date startDate = new Date(); startDate.setTime(startDate.getTime()); //定义触发器结束时间 Date endDate = new Date(); endDate.setTime(startDate.getTime() + 5000 * 10); //创建触发器Trigger Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "triggerGroup1") .startNow() //立即执行 .startAt(startDate) //触发器触发后startDate秒开始 .endAt(endDate) //触发器开始后endDate秒结束 .withSchedule( //指定调度策略 SimpleScheduleBuilder.simpleSchedule() //调度对象 .withIntervalInSeconds(1) //每隔1s执行一次 .repeatForever()) //永久执行 .build(); //在调度器中安排jobDetail和trigger scheduler.scheduleJob(jobDetail, trigger); System.out.println("------调度器开始执行------"); scheduler.start(); } }