JobStore是用来保存你的工作数据的.永远不要在你的代码中使用
JobStore,它都是通过属性文件来配置的.
下面我们做一个RAMJobStore的 例子.
建一个job:
package com;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class PropJob implements Job
{
private static final Log log = LogFactory.getLog(PropJob.class);
public void execute(JobExecutionContext context) throws JobExecutionException
{
System.out.println("begin:::::");
log.info("job is begin:" + context.getTrigger().getName());
}
}
测试类:
package com;
import java.util.Calendar;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class PriorityDemo
{
public void run() throws Exception
{
// 从属性文件中读取工程池信息
SchedulerFactory sf = new StdSchedulerFactory(
"src/com/quartz.properties");
Scheduler scheduler = sf.getScheduler();
JobDetail job = new JobDetail("propJob", null, PropJob.class);
Calendar startTime = Calendar.getInstance();
// 在当前时间上加5秒
startTime.add(Calendar.SECOND, 5);
/** *//**
* String name, String group, String jobName, String jobGroup, Date
* startTime, Date endTime, int repeatCount, long repeatInterval
*/
// 每5秒一次
SimpleTrigger trigger1 = new SimpleTrigger("trigger1", null, startTime
.getTime(), null, 1, 5L * 1000L);
trigger1.setPriority(-5);
trigger1.setJobName("propJob");
// 每10秒一次
SimpleTrigger trigger2 = new SimpleTrigger("trigger2", null, startTime
.getTime(), null, 1, 10L * 1000L);
trigger2.setJobName("propJob");
// 每15秒一次
SimpleTrigger trigger3 = new SimpleTrigger("trigger3", null, startTime
.getTime(), null, 1, 15L * 1000L);
trigger3.setPriority(10);
trigger3.setJobName("propJob");
// 安排工作计划
scheduler.scheduleJob(job, trigger1);
scheduler.scheduleJob(trigger2);
scheduler.scheduleJob(trigger3);
// 任务开始
scheduler.start();
// 休息30秒
Thread.sleep(30L * 1000L);
// 关闭
scheduler.shutdown();
}
public static void main(String[] args)
{
PriorityDemo priorityDemo = new PriorityDemo();
try
{
priorityDemo.run();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
输出结果:
2008-5-9 10:45:13 org.quartz.core.SchedulerSignalerImpl <init>
信息: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2008-5-9 10:45:13 org.quartz.core.QuartzScheduler <init>
信息: Quartz Scheduler v.1.6.1-RC1 created.
2008-5-9 10:45:13 org.quartz.simpl.RAMJobStore initialize
信息: RAMJobStore initialized.
2008-5-9 10:45:13 org.quartz.impl.StdSchedulerFactory instantiate
信息: Quartz scheduler 'PriorityDemoScheduler' initialized from the specified file : 'src/com/quartz.properties'
2008-5-9 10:45:13 org.quartz.impl.StdSchedulerFactory instantiate
信息: Quartz scheduler version: 1.6.1-RC1
2008-5-9 10:45:13 org.quartz.core.QuartzScheduler start
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED started.
2008-5-9 10:45:18 com.PropJob execute
信息: job is begin:trigger3
2008-5-9 10:45:18 com.PropJob execute
信息: job is begin:trigger2
2008-5-9 10:45:18 com.PropJob execute
信息: job is begin:trigger1
begin:::::
begin:::::
begin:::::
2008-5-9 10:45:23 com.PropJob execute
信息: job is begin:trigger1
begin:::::
2008-5-9 10:45:28 com.PropJob execute
信息: job is begin:trigger2
begin:::::
begin:::::
2008-5-9 10:45:33 com.PropJob execute
信息: job is begin:trigger3
2008-5-9 10:45:43 org.quartz.core.QuartzScheduler shutdown
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED shutting down.
2008-5-9 10:45:43 org.quartz.core.QuartzScheduler standby
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED paused.
2008-5-9 10:45:43 org.quartz.core.QuartzScheduler shutdown
信息: Scheduler PriorityDemoScheduler_$_NON_CLUSTERED shutdown complete.
我们的属性文件已经被正确读取.
有人可能会对
org.quartz.scheduler.instanceName=PriorityExampleScheduler
产生疑问,PriorityDemoScheduler这个类是不存在的,
其实你只要在你的job类后面加上Scheduler就可以了.