官网:http://www.quartz-scheduler.org/
下载:http://www.quartz-scheduler.org/downloads
maven地址
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
首先,要创建一个任务,quartz规定任务必须实现org.quarta.Job接口
此接口就一个方法execute,这个方法就是任务执行的时候允许的方法,具体的业务实现在这个方法里,我这里只进行了简单的打印。
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
String jobname = context.getTrigger().getJobKey().getName(); //可以通过context参数获取job名等
System.out.println("Hello World!");
}
}
任务创建完成后,我们还要创建一个包含任务信息的jobDetail,一个管理任务执行的促发器trigger,最后就是调度任务。
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.core.jmx.JobDetailSupport;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzBean {
static SchedulerFactory schedulerfactory = new StdSchedulerFactory();
static Scheduler scheduler = null;
/**
* 添加定时任务
*
* @param date 任务开始时间
* @param job 任务处理类 需要继承Job
* @param jobGorupName 任务组名
* @param jobName 任务名称
* @return 0 添加成功 1:任务已经存在 2:添加异常
* @throws SchedulerException
*/
public static int addJob(Date date,Class<? extends Job> job,
String jobGorupName,String jobName) {
try {
// 创建一个SchedulerFactory工厂实例
scheduler = schedulerfactory.getScheduler();
JobKey jobKey = JobKey.jobKey(jobName, jobGorupName);
if (scheduler.checkExists(jobKey)) {
return 1;// 任务已经存在
}
// 用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
// 创建一个JobDetail实例,指定SimpleJob
Map<String, Object> JobDetailmap = new HashMap<String, Object>();
JobDetailmap.put("name", jobName);// 设置任务名字
JobDetailmap.put("group", jobGorupName);// 设置任务组
JobDetailmap.put("jobClass", job.getCanonicalName());// 指定执行类
JobDetail jobDetail;
jobDetail = JobDetailSupport.newJobDetail(JobDetailmap);
// 添加数据内容
//jobDetail.getJobDataMap().put("task", task);// 传输的上下文
//date.setTime(date.getTime() + 30000L);
// 构建一个触发器,规定触发的规则
Trigger simpleTrigger = TriggerBuilder// 创建一个新的TriggerBuilder来规范一个触发器
.newTrigger()// 给触发器起一个名字和组名
.withIdentity(jobName, jobGorupName)
// .startNow()//立即执行
.startAt(date)
.build();// 产生触发器
// 向Scheduler中添加job任务和trigger触发器
scheduler.scheduleJob(jobDetail, simpleTrigger);
// 启动
scheduler.start();
return 0;
} catch (Exception e) {
e.printStackTrace();
return 2;// 操作异常
}
}
/**
* 关闭任务调度
*
* @param jobName
* 任务名称
* @return 0 关闭成功 1: 关闭失败 2:操作异常
* @throws SchedulerException
*/
public static int closeJob(String jobName, String jobGorupName) {
// 关闭任务调度
try {
scheduler = schedulerfactory.getScheduler();
JobKey jobKey = JobKey.jobKey(jobName, jobGorupName);
return scheduler.deleteJob(jobKey) == true ? 0 : 1;
} catch (SchedulerException e) {
return 2;
}
}
}
这样一个简单的 创建定时器 和 关闭定时器 的功能就实现了