Quartz 版本:quartz-2.2.1
jdk1.6
1.因为JobBuilder.newJob()只能接收class,所以我建QuartzObj.class,让QuartzTxJob1.class和QuartzTxJob2.class来extends QuartzObj.class
2.JobBuilder.newJob(obj.getClass()).withIdentity("job"+code, "group"+code).build(); 中的job,group不能重复
3.TriggerBuilder.newTrigger().withIdentity(new TriggerKey("trigger"+code, "group"+code)).startNow() .withSchedule(CronScheduleBuilder.cronSchedule(cron)) .build();中的trigger不能重复group跟newJob中的group必须相同。
4.如果cron表达式以秒为单位,执行的时候可能与设置的时间有几秒的延迟,间隔设置成分钟就没有了
5. CronTrigger trigger = TriggerBuilder.newTrigger()可以使用其他子类来引用(SimpleTrigger )
6.一个JobDetail 支持多个job,但一个 Trigger 只能被指派给一个 Job。
7.quartz2.x进行了大幅度修改,因此兼容性更好,所以建议使用最新版本
2.x 以上JobDetail jobDetail = JobBuilder.newJob(PreOperationJob.class)
2.x 以下JobDetail jobDetail = new JobDetail("job1_1","jGroup1", PreOperationJob.class);
8.使用spring3.几的时候一定要小心,Spring只能支持Quartz1.x系列!如果要使用就要升级spring或者降低Quartz版本
QuartzManager.class
package com.cc.quartztx;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
/**
* quartz 管理类
*
* @author ee
*
*/
public class QuartzManager {
/**
* @param obj
* @param code 区分 job group trigger
* @param cron cron表达式
*/
public static void run(QuartzObj obj,String code,String cron) {
try {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
JobDetail job = JobBuilder.newJob(obj.getClass()).withIdentity("job"+code, "group"+code).build();
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(new TriggerKey("trigger"+code, "group"+code)).startNow()
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
} catch (SchedulerException e) {
<span style="white-space:pre"> </span>e.printStackTrace();
}
}
}
QuartzObj.class
package com.cc.quartztx;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzObj implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
}
}
package com.cc.quartztx;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzTxJob1 extends QuartzObj implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
Date date=new Date();
System.out.println("Job1:"+this.getClass().getName()+"--当前时间"+date.getMinutes()+"分"+date.getSeconds()+"秒");
}
}
QuartzTxJob2.class
package com.cc.quartztx;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzTxJob2 extends QuartzObj implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
Date date=new Date();
System.out.println("Job2:"+this.getClass().getName()+"--当前时间"+date.getMinutes()+"分"+date.getSeconds()+"秒");
}
}
QuartzTx.class
package com.cc.quartztx;
public class QuartzTx {
public static void main(String[] args) {
QuartzTxJob1 QuartzTxJob1=new QuartzTxJob1();
QuartzTxJob2 QuartzTxJob2=new QuartzTxJob2();
QuartzManager.run(QuartzTxJob1,"1","10 0/1 * * * ?");// 每一分钟的10秒执行
QuartzManager.run(QuartzTxJob2,"2","15 0/1 * * * ?");//每一分钟的15秒执行<pre code_snippet_id="416146" snippet_file_name="blog_20140704_6_9332100" name="code" class="java">
}
}
运行效果:
Job2:com.cc.quartztx.QuartzTxJob2--当前时间24分15秒
Job1:com.cc.quartztx.QuartzTxJob1--当前时间25分10秒
Job2:com.cc.quartztx.QuartzTxJob2--当前时间25分15秒
Job1:com.cc.quartztx.QuartzTxJob1--当前时间26分10秒
Job2:com.cc.quartztx.QuartzTxJob2--当前时间26分15秒
Job1:com.cc.quartztx.QuartzTxJob1--当前时间27分10秒
Job2:com.cc.quartztx.QuartzTxJob2--当前时间27分15秒
Job1:com.cc.quartztx.QuartzTxJob1--当前时间28分10秒
Job2:com.cc.quartztx.QuartzTxJob2--当前时间28分15秒