1.介绍(感觉Spring框架Quartz也是基于这个封装的)
Quartz是OpenSymphony开源组织在Job scheduling领域一个开源项目,
它可以与J2EE与J2SE应用程序相结合也可以单独使用。
Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。
Jobs可以做成标准的Java组件或 EJBs。
2.简单的实现
第一步:
引包:log4j-1.2.16,quartz-2.1.7,slf4j-api-1.6.1.jar,slf4j-log4j12-1.6.1.jar
注:这些包都在下载的Quartz包里面包含着,因此没有必要为寻找这几个包而头疼。
第二步:
创建要被定执行的任务类:
创建一个实现了org.quartz.Job接口的类,并实现这个接口的唯一
一个方法execute(JobExecutionContext arg0) throws JobExecutionException
实例:
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class myJob implements Job {
public void execute(JobExecutionContext arg0)
throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.format(new Date()));
}
}
第三步:创建任务调度,并执行
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class Test {
public void go() throws Exception {
// 首先,必需要取得一个Scheduler的引用
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
String time="0 51 11 ? * *";
// jobs可以在scheduled的sched.start()方法前被调用
// job 1将每隔20秒执行一次
JobDetail job = new JobDetail("job1", "group1", myJob.class);
CronTrigger trigger = new CronTrigger("trigger1", "group1");
trigger.setCronExpression(time);
Date ft = sched.scheduleJob(job, trigger);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",
并且以如下重复规则重复执行: " + trigger.getCronExpression());
// job 2将每2分钟执行一次(在该分钟的第15秒)
job = new JobDetail("job2", "group1",myJob.class);
trigger = new CronTrigger("trigger2", "group1");
trigger.setCronExpression(time);
ft = sched.scheduleJob(job, trigger);
System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",
并且以如下重复规则重复执行: " + trigger.getCronExpression());
// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job
sched.start();
try {
// 主线程等待一分钟
Thread.sleep(60L * 1000L);
} catch (Exception e) {
}
// 关闭定时调度,定时器不再工作
sched.shutdown(true);
}
public static void main(String[] args) throws Exception {
Test test = new Test();
test.go();
}
}
2.封装一个Job管理器
import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
//定时任务管理类
public class QuartzManager {
private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
//添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
//@param jobName 任务名
//@param jobClass 任务
//@param time 时间设置,参考quartz说明文档
//@throws SchedulerException
//@throws ParseException
public static void addJob(String jobName, String jobClass, String time) {
try {
Scheduler sched = gSchedulerFactory.getScheduler();
// 任务名,任务组,任务执行类
JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass));
// 触发器
// 触发器名,触发器组
CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);
trigger.setCronExpression(time);// 触发器时间设定
sched.scheduleJob(jobDetail, trigger);
// 启动
if (!sched.isShutdown()){
sched.start();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//@param jobName 任务名
//@param jobClass 任务
//@param time 时间设置,参考quartz说明文档
//@throws SchedulerException
//@throws ParseException
org.quartz.Job(基于OpenSymphony开源组织在Job scheduling领域的开源项目)
原文:https://www.cnblogs.com/HuiShouGuoQu/p/13577137.html