前言
最近做了一个任务调度的功能,使用的是quartz框架,非常简单易用。
正题
简介
Quartz是一个完全由java编写的开源作业调度框架,它可以与J2EE与J2SE应用程序相结合也可以单独使用。
说简单些,就是它可以定时的调用你的任务(任务里面可以写你自己的逻辑或者调用你其他的模块或流程)。
简单应用
quartz应用非常简单,搭好环境后只需要写一个实现job接口的实现类即可。
1、环境搭建
新建一个java项目,引入以下jar包:
quartz2.1.1.jar(这个jar包会用到下面几个jar)
Log4j-1.2.16.jar
Slf4j-api-1.6.1.jar
Slf4j-log4j12-1.6.1.jar
2、新建一个任务类(实现job接口)
MyJob.java:(放在job包下)
package job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("我的任务");
}
}
3、新建一个测试类
TestJob.java:
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import job.MyJob;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class TestJob {
private static Scheduler sched = null;
/**
* @param args
* @throws SchedulerException
*/
public static void main(String[] args) throws SchedulerException {
TestJob t = new TestJob();
t.useJob();
t.addJob("myjob1", "5 * * ? * *", MyJob.class);//启动任务,每隔5s执行一次MyJob任务
// t.deleteJob("myjob1");//停止任务
}
/**
* 启动Schedule
* @throws SchedulerException
*/
public void useJob() throws SchedulerException{
SchedulerFactory sf = new StdSchedulerFactory();
try {
sched = sf.getScheduler();
sched.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* 任务中添加作业
* @param jobName 任务名称,可以自己命名
* @param spaceTime corn表达式,调用的时间,例如“5 * * ? * *”
* @param clazz job实现类
*/
public void addJob(String jobName,String spaceTime,Class clazz){
String groupName = jobName;
JobDetail jobs = newJob(clazz).withIdentity(jobName,groupName).build();
CronTrigger trigger;
try {
if(sched.isShutdown()){
sched.start();
}
trigger = newTrigger().withIdentity(jobName+groupName, groupName).withSchedule(cronSchedule(spaceTime)).build();
sched.scheduleJob(jobs, trigger);
} catch (Exception e) {
e.printStackTrace();
new Exception(e);
}
}
/**
* 在任务中删除改作业
* @param jobName
*/
public void deleteJob(String jobName){
String groupName = jobName;
try {
if(sched.isShutdown()){
sched.start();
}else{
JobKey key = new JobKey(jobName,groupName);
sched.deleteJob(key);
}
} catch (SchedulerException e) {
e.printStackTrace();
new Exception(e);
}
}
}
4、运行结果:
quartz整个的使用很简单,唯一不太好理解的就是它的corn表达式,我简单说一下,corn表达式一般有六个(年份可以不写),依次是:秒 分 时 天 星期 月( 年份);注意每一个时间间隔中间都有一个空格,不标明的可以使用*号,比如每隔5秒执行一次就是“5 * * ? * *",详细的解释可见http://blog.csdn.net/kkdelta/article/details/7238581