标签:
本文上传一个小Quartz 的小Demo;
项目目录如下:
任务类 WorkJob.java :
/**
* @package :com.andy.demo.quartz.job<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午2:19:22<br>
*/
package com.andy.demo.quartz.job;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* @package :com.andy.demo.quartz.job<br>
* @file :WorkJob.java<br>
* @describe :<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午2:19:22<br>
* @updater :<br>
* @updateDate :<br>
* @updateContent :<br>
*/
public class WorkJob implements Job {
public static int times = 1;
/*
* (non-Javadoc)
*
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
String jobName = context.getJobDetail().getName();
String triggerName = context.getTrigger().getName();
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
String personName = jobDataMap.getString("personName");
Integer personAge = jobDataMap.getIntegerFromString("personAge");
System.out.println("[" + times + "]: Date[" + new Date() + "]");
System.out.println("JOB[jobName[" + jobName + "],triggerName["
+ triggerName + "],jobDateMap[" + personName + "," + personAge
+ "]]");
System.out.println(".................................");
times++;
}
}
调度的抽象类 TriggerRunner.java :
/**
* @package :com.andy.demo.quartz.trigger.dao<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:03:19<br>
*/
package com.andy.demo.quartz.trigger.dao;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
/**
* @package :com.andy.demo.quartz.trigger.dao<br>
* @file :TriggerRunner.java<br>
* @describe :<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:03:19<br>
* @updater :<br>
* @updateDate :<br>
* @updateContent :<br>
*/
public abstract class TriggerRunner {
protected static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
/**
*
* @method :loadJob<br>
* @describe :加载 调度,默认JOB 名称、JOB 组名、Trigger 名称、Tirgger 组名<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午5:05:31 <br>
* @param data
* @throws Exception
* void
*/
public abstract void loadJob(Object... data) throws Exception;
/**
*
* @method :loadJob<br>
* @describe :加载 调度,有参数<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:11:23 <br>
* @param jobName
* :JOB 名称
* @param jobGroup
* :JOB 组名
* @param triggerName
* :Trigger 名称
* @param triggerGroup
* :Tirgger 组名
* @param data
* :可变实参
* @throws Exception
* void
*/
public abstract void loadJob(String jobName, String jobGroup,
String triggerName, String triggerGroup, Object... data)
throws Exception;
/**
*
* @method :startJobs<br>
* @describe :启动 调度<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:04:24 <br>
* @throws SchedulerException
* void
*/
public void startJobs() throws SchedulerException {
Scheduler sched = gSchedulerFactory.getScheduler();
System.out.println("startJobs..." + gSchedulerFactory.toString() + ", "
+ sched.toString());
sched.start();
}
/**
*
* @method :shutdownJobs<br>
* @describe :关闭调度<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:04:49 <br>
* @throws SchedulerException
* void
*/
public void shutdownJobs() throws SchedulerException {
Scheduler sched = gSchedulerFactory.getScheduler();
System.out.println("shutdownJobs..." + gSchedulerFactory.toString()
+ ", " + sched.toString());
if (!sched.isShutdown()) {
sched.shutdown();
}
}
} 调度子类一 SimpleTriggerRunner.java :
/**
* @package :com.andy.demo.quartz.trigger<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:15:21<br>
*/
package com.andy.demo.quartz.trigger;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleTrigger;
import com.andy.demo.quartz.job.WorkJob;
import com.andy.demo.quartz.trigger.dao.TriggerRunner;
/**
* @package :com.andy.demo.quartz.trigger<br>
* @file :SimpleTriggerRunner.java<br>
* @describe :<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:15:21<br>
* @updater :<br>
* @updateDate :<br>
* @updateContent :<br>
*/
public class SimpleTriggerRunner extends TriggerRunner {
private static String jobName = "simple_printPerson";
private static String jobGroup = "simple_person";
private static String triggerName = "simple_tri_printPerson";
private static String triggerGroup = "simple_tri_group_person";
/*
* (non-Javadoc)
*
* @see
* com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.Object
* [])
*/
@Override
public void loadJob(Object... data) throws Exception {
// TODO Auto-generated method stub
this.loadJob(jobName, jobGroup, triggerName, triggerGroup, data);
}
/*
* (non-Javadoc)
*
* @see
* com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.Object[])
*/
@Override
public void loadJob(String jobName, String jobGroup, String triggerName,
String triggerGroup, Object... data) throws Exception {
// TODO Auto-generated method stub
// 1、创建 Scheduler 对象
Scheduler scheduler = gSchedulerFactory.getScheduler();
System.out.println("loadJob..." + gSchedulerFactory.toString() + ", "
+ scheduler.toString());
// 2、创建 一个 JobDetail 实例, 指定 SimpleJob
JobDetail jobDetail = new JobDetail(jobName, jobGroup, WorkJob.class);
// 给 JobDetail 添加一些参数
if (data != null && data.length >= 2 && data.length % 2 == 0) {
for (int i = 0; i < data.length - 1; i = i + 2) {
jobDetail.getJobDataMap().put(data[i], data[i + 1]);
}
}
// 3、创建 一个 SimpleTrigger 实例
SimpleTrigger simpleTrigger = new SimpleTrigger(triggerName,
triggerGroup);
System.out.println(new Date());
// 定义调度规则
// ①马上启动
// simpleTrigger.setStartTime(new Date());
// 5秒后启动
simpleTrigger
.setStartTime(new Date(System.currentTimeMillis() + 5000L));
// ①两分钟后停止(当运行次数和时间范围冲突时,超过时间范围的任务运行不被执行)
simpleTrigger.setEndTime(new Date(
System.currentTimeMillis() + 2 * 60 * 1000L));
// ②每5秒运行一次
simpleTrigger.setRepeatInterval(3000);
// ③共运行50次
simpleTrigger.setRepeatCount(50);
// 4、注册并进行调度
scheduler.removeJobListener(jobName);
scheduler.removeTriggerListener(jobName);
scheduler.scheduleJob(jobDetail, simpleTrigger);
}
} 调度子类一 CronTriggerRunner.java :
/**
* @package :com.andy.demo.quartz.trigger<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:15:46<br>
*/
package com.andy.demo.quartz.trigger;
import java.util.Date;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import com.andy.demo.quartz.job.WorkJob;
import com.andy.demo.quartz.trigger.dao.TriggerRunner;
/**
* @package :com.andy.demo.quartz.trigger<br>
* @file :CronTriggerRunner.java<br>
* @describe :<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午4:15:46<br>
* @updater :<br>
* @updateDate :<br>
* @updateContent :<br>
*/
public class CronTriggerRunner extends TriggerRunner {
private static String jobName = "cron_printPerson";
private static String jobGroup = "cron_person";
private static String triggerName = "cron_tri_printPerson";
private static String triggerGroup = "cron_tri_group_person";
/*
* (non-Javadoc)
*
* @see
* com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.Object
* [])
*/
@Override
public void loadJob(Object... data) throws Exception {
// TODO Auto-generated method stub
this.loadJob(jobName, jobGroup, triggerName, triggerGroup, data);
}
/*
* (non-Javadoc)
*
* @see
* com.andy.demo.quartz.trigger.dao.TriggerRunner#loadJob(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.Object[])
*/
@Override
public void loadJob(String jobName, String jobGroup, String triggerName,
String triggerGroup, Object... data) throws Exception {
// TODO Auto-generated method stub
// 1、创建 Scheduler 对象
Scheduler scheduler = gSchedulerFactory.getScheduler();
// 2、创建 一个 JobDetail 实例, 指定 SimpleJob
JobDetail jobDetail = new JobDetail(jobName, jobGroup, WorkJob.class);
// 给 JobDetail 添加一些参数
if (data != null && data.length >= 2 && data.length % 2 == 0) {
for (int i = 0; i < data.length - 1; i = i + 2) {
jobDetail.getJobDataMap().put(data[i], data[i + 1]);
}
}
// 3、创建 CronTrigger 实例
CronTrigger cronTrigger = new CronTrigger(triggerName, triggerGroup);
System.out.println(new Date());
// 定义调度规则
// 设置调度启动、关闭时间(立即启动,2分钟后关闭)(当运行次数和时间范围冲突时,超过时间范围的任务运行不被执行)
cronTrigger.setStartTime(new Date());
cronTrigger.setEndTime(new Date(
System.currentTimeMillis() + 2 * 60 * 1000L));
// 每5秒执行一次
String cronExpressionStr = "0/5 * * * * ?";
CronExpression cronExpression = new CronExpression(cronExpressionStr);
cronTrigger.setCronExpression(cronExpression);
// 4、注册并进行调度
scheduler.removeJobListener(jobName);
scheduler.removeTriggerListener(jobName);
scheduler.scheduleJob(jobDetail, cronTrigger);
}
} 测试类 TriggerRunnerTest.java :
/**
* @package :com.andy.demo.quartz.trigger.test<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午5:14:52<br>
*/
package com.andy.demo.quartz.trigger.test;
import org.junit.Test;
import com.andy.demo.quartz.trigger.CronTriggerRunner;
import com.andy.demo.quartz.trigger.SimpleTriggerRunner;
import com.andy.demo.quartz.trigger.dao.TriggerRunner;
/**
* @package :com.andy.demo.quartz.trigger.test<br>
* @file :TriggerRunnerTest.java<br>
* @describe :<br>
* @author :wanglongjie<br>
* @createDate :2015年11月2日下午5:14:52<br>
* @updater :<br>
* @updateDate :<br>
* @updateContent :<br>
*/
public class TriggerRunnerTest {
public Object data[] = new Object[] { "personName", "Andy", "personAge",
"25" };
public static void main(String[] args) {
try {
Object data[] = new Object[] { "personName", "Andy", "personAge",
"25" };
TriggerRunner runner = new CronTriggerRunner();
// TriggerRunner runner = new SimpleTriggerRunner();
runner.loadJob(data);
runner.startJobs();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Test
public void testSimpleTirggerRunner() throws Exception {
TriggerRunner runner = new SimpleTriggerRunner();
runner.loadJob(data);
runner.startJobs();
}
@Test
public void testCronTirggerRunner() throws Exception {
TriggerRunner runner = new CronTriggerRunner();
runner.loadJob(data);
runner.startJobs();
}
}
标签:
原文地址:http://my.oschina.net/andy1989/blog/524981