介绍
Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。
核心概念
Quartz核心的概念:scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节
Job任务:其实Job是接口,其中只有一个execute方法:
package org.quartz;
public abstract interface Job {
public abstract void execute(JobExecutionContext arg0) throws JobExecutionException;
}
我们开发者只要实现此接口,实现execute方法即可。把我们想做的事情,在execute中执行即可。
JobDetail:任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息。
Trigger触发器:执行任务的规则;比如每天,每小时等。
一般情况使用SimpleTrigger,和CronTrigger,这个触发器实现了Trigger接口。
对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger
对于简单的时间来说,比如每天执行几次,使用SimpleTrigger
scheduler任务调度:是最核心的概念,需要把JobDetail和Trigger注册到scheduler中,才可以执行。
开发步骤
1、打开Eclipse新建一个Java Product项目
2、下载quartz jar包 地址:http://www.quartz-scheduler.org/downloads/
引入到新建的项目中
项目右键->Build Path->Config Build Path->Libraries->Add External JARs
3、新建com.quartz、com.service Package
4、在包中新建CronTriggerQuartz、SimpleTriggerQuartz、QuartzService Class
CronTriggerQuartz.java
package com.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class CronTriggerQuartz implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("CronTriggerQuartz at " + new Date());
}
}
SimpleTriggerQuartz.java
package com.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SimpleTriggerQuartz implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("SimpleTriggerQuartz at " + new Date());
}
}
QuartzService.java
package com.service;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.quartz.CronTriggerQuartz;
import com.quartz.SimpleTriggerQuartz;
public class QuartzService {
public static void main(String[] args) {
System.out.println("开始执行...");
QuartzService service=new QuartzService();
service.startSimpleSchedule();
service.startCronSchedule();
System.out.println("执行结束");
}
public void startSimpleSchedule() {
try {
// 1、创建Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 2、定义一个Trigger
SimpleScheduleBuilder builder = SimpleScheduleBuilder
.simpleSchedule()
// 设置间隔执行时间
.withIntervalInSeconds(60)
// .withIntervalInHours(24)
// 设置执行次数
.repeatForever();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("Simpletrigger1_1", "SimpleGroup1").startNow()
.withSchedule(builder).build();
// 3、创建一个JobDetail实例,指定Quartz
JobDetail jobDetail = JobBuilder.newJob(SimpleTriggerQuartz.class).withIdentity("Simplejob1_1", "SimpleGroup1").build();
// 4、调度执行
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void startCronSchedule() {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail jobDetail = JobBuilder.newJob(CronTriggerQuartz.class)
.withIdentity("Cronjob1_1", "CronGroup1").build();
CronScheduleBuilder builder = CronScheduleBuilder
.cronSchedule("0 33 14 * * ?");
CronTrigger cornTrigger = TriggerBuilder.newTrigger()
.withIdentity("Crontrigger1_1", "CronGroup1").startNow()
.withSchedule(builder).startNow().build();
scheduler.scheduleJob(jobDetail, cornTrigger);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
项目结构图:
实例中有两种触发器 SimpleTrigger、CornTrigger startSimpleSchedule() 方法,60秒执行一次 startCronSchedule() 方法( 0 33 14 * * ?) 每天14:33执行一次