对于Quartz来说每个任务都要实现它的接口Job,重写里面的execute方法。
以下的demo,简单介绍了Quartz的任务创建、装载、执行。更详细的信息可参考Quartz的API
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
//通过JobExecutionContext 获取JobDetail中的JobDataMap
JobDataMap map = context.getJobDetail().getJobDataMap();
System.out.println("map value: " + map.get("character"));
System.out.println("time: " + context.getJobDetail().getName() + " currentTime: " + System.currentTimeMillis());
try {
JobDetail j = new StdSchedulerFactory().getScheduler().getJobDetail("job", "group123");
System.out.println(j.getName() + "------" + j.getGroup() + "----" + j.getJobClass());
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
//构建任务日程表工程,使用StdSchedulerFactory,该类已经实现接口SchedulerFactory
SchedulerFactory factory = new StdSchedulerFactory();
try {
//获取任务日程队列
Scheduler scheduler = factory.getScheduler();
//启动
scheduler.start();
System.out.println("start time: " + System.currentTimeMillis());
//使用TriggerUtils生成触发时间
long ts = TriggerUtils.getNextGivenSecondDate(null, 10).getTime();
//构建属于SimpleJob的JobDetail,对于Scheduler来说执行的任务是每个JobDetail,
//而JobDetail是针对这个SimpleJob来构建的,所以任务执行的时候是执行SimpleJob
JobDetail jobDetail = new JobDetail("job", "group123", SimpleJob.class);
//构建触发器,把触发时间等信息封装好
SimpleTrigger trigger = new SimpleTrigger("trigger", "group123", "job", "group123", new Date(ts), null, 4, 10000);
JobDataMap map = new JobDataMap();
Person p = new Person();
p.setId(12);
p.setName("十二少");
map.put("person", p);
map.put("character", "brave");
//把JobDataMap 对象注入到jobDetail中,到任务执行的时候可以获取JobDetail
//也可以通过JobDetail获取JobDataMap
jobDetail.setJobDataMap(map);
//装载任务到任务日程表中,由于任务已经启动了,所以到了触发时间,任务将会执行
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以下的demo,简单介绍了Quartz的任务创建、装载、执行。更详细的信息可参考Quartz的API
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
//通过JobExecutionContext 获取JobDetail中的JobDataMap
JobDataMap map = context.getJobDetail().getJobDataMap();
System.out.println("map value: " + map.get("character"));
System.out.println("time: " + context.getJobDetail().getName() + " currentTime: " + System.currentTimeMillis());
try {
JobDetail j = new StdSchedulerFactory().getScheduler().getJobDetail("job", "group123");
System.out.println(j.getName() + "------" + j.getGroup() + "----" + j.getJobClass());
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
//构建任务日程表工程,使用StdSchedulerFactory,该类已经实现接口SchedulerFactory
SchedulerFactory factory = new StdSchedulerFactory();
try {
//获取任务日程队列
Scheduler scheduler = factory.getScheduler();
//启动
scheduler.start();
System.out.println("start time: " + System.currentTimeMillis());
//使用TriggerUtils生成触发时间
long ts = TriggerUtils.getNextGivenSecondDate(null, 10).getTime();
//构建属于SimpleJob的JobDetail,对于Scheduler来说执行的任务是每个JobDetail,
//而JobDetail是针对这个SimpleJob来构建的,所以任务执行的时候是执行SimpleJob
JobDetail jobDetail = new JobDetail("job", "group123", SimpleJob.class);
//构建触发器,把触发时间等信息封装好
SimpleTrigger trigger = new SimpleTrigger("trigger", "group123", "job", "group123", new Date(ts), null, 4, 10000);
JobDataMap map = new JobDataMap();
Person p = new Person();
p.setId(12);
p.setName("十二少");
map.put("person", p);
map.put("character", "brave");
//把JobDataMap 对象注入到jobDetail中,到任务执行的时候可以获取JobDetail
//也可以通过JobDetail获取JobDataMap
jobDetail.setJobDataMap(map);
//装载任务到任务日程表中,由于任务已经启动了,所以到了触发时间,任务将会执行
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}