日期:2014-05-17  浏览次数:20791 次

quartz调用问题
想问下怎么使用quartz定时多次调用,例如10分钟一次。每次执行同一作业10次。每次进行动态的job参数传递。请大神们给个demo

------解决方案--------------------
 

包括两个java文件:TestQuartz .java和TestJob.java。

测试用的Quartz包是quartz-all-1.6.4.jar。

 

TestQuartz .java的源代码

package test;

import java.text.ParseException;
import java.util.Date;

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 TestQuartz {

 /**
* @param args
* @throws SchedulerException 
* @throws ParseException 
*/
 public static void main(String[] args) throws SchedulerException, ParseException {
SchedulerFactory schedfact=new StdSchedulerFactory();
Scheduler sched=schedfact.getScheduler();
JobDetail jd;
String cron="0/5 * * * * ?";//0秒开始,每5秒重复一次
String datatype="this is a test.";

jd = new JobDetail();
jd.setJobClass(TestJob.class);//执行任务的类
jd.setName(datatype);//任务名
jd.setGroup("ftp_job_grp");//任务组名
jd.setRequestsRecovery(true);
jd.getJobDataMap().put("params", datatype);//要传递的参数,任务启动时可以取得
  
CronTrigger ctrg=new CronTrigger();
ctrg.setCronExpression(cron);//时间表达式
ctrg.setName("trg_ftp");//触发器名
ctrg.setGroup("ftp_trg_grp");//触发器组名
ctrg.setStartTime(new Date());//触发器启动时间

sched.scheduleJob(jd,ctrg);
sched.start();//启动定时调度计划
 }
}

 

-----------------------------

TestJob.java文件的源代码:
package test;

import java.util.Date;

import org.quartz.*;

public class TestJob implements Job {

 @Override
 public void execute(JobExecutionContext arg0) throws JobExecutionException {
JobDataMap map= arg0.getJobDetail().getJobDataMap();//取参数
System.out.println(new Date().toString() +" this is test job.execute()");
if(map!=null && map.size()>0)
{
String[] keys=map.getKeys();//取所有键名
for(String key:keys)
{
System.out.println(key+"="+map.getString(key));
}
}

 }
 }