添加pom.xml
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<!-- commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
建立任务类:
package com.test.quartz.jobs;
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 HelloJob implements Job{
private static Log log = LogFactory.getLog(HelloJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("This is HelloJob类的任务,在execute这个方法中。。。");
log.info("do it ......");
log.info("任务做完!");
}
}
使用simpleTrigger做的测试类
package com.test.quartz;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.test.quartz.jobs.HelloJob;
public class SimpleTriggerTest {
public static void main(String[] args) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("jobsName1", "jobsGroup1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("triggerName", "triggerGroup1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
这就是quartz使用simpletrigger的基本使用。
quartz除了simpletrigger还有crontrigger这种方式,使用如下:
package com.test.quartz;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.test.quartz.jobs.HelloJob;
import com.test.quartz.listener.HelloJobListener;
public class CronTriggerTest {
private static Log log = LogFactory.getLog(CronTriggerTest.class);
public static void main(String[] args) throws Exception {
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("jobsName1", "jobsGroup1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("triggerName", "triggerGroup1").withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?")).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
//scheduler.getListenerManager().addJobListener(new HelloJobListener());
// 这里是添加listener的,有jobListener还有triggerListener还有schedulerListener其作用如他们一名称一样
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
使用quartz的Listener,quartz的listener分为jobListener,tirggerListener和schedulerListener。
这里来个jobListener的例子:
package com.test.quartz.listener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
public class HelloJobListener implements JobListener {
private static Log log = LogFactory.getLog(HelloJobListener.class);
@Override
public String getName() {
// TODO Auto-generated method stub
return "HelloJobListener";
}
@Override
public void jobToBeExecuted(JobExecutionContext context) {
String jobName = context.getJobDetail().getKey().toString();
log.info("jobToBeExecuted");
log.info("Job : " + jobName + " is going to start...");
}
@Override
public void jobExecutionVetoed(JobExecutionContext context) {
log.info("jobExecutionVetoed");
}
@Override
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
log.info("jobWasExecuted");
String jobName = context.getJobDetail().getKey().toString();
log.info("Job : " + jobName + " is finished...");
if (!jobException.getMessage().equals("")) {
log.info("Exception thrown by: " + jobName + " Exception: " + jobException.getMessage());
}
}
}
分别是任务之前,任务完成后,和任务取消完成的方法。
多任务
一个Trigger只能对应一个JobDetail(具体的任务)
package com.test.quartz.jobs;
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 JobA implements Job {
private static Log log = LogFactory.getLog(JobA.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("JobA doit ......");
}
}
package com.test.quartz.jobs;
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 JobB implements Job {
private static Log log = LogFactory.getLog(JobB.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("JobB doit ......");
}
}
package com.test.quartz.jobs;
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 JobC implements Job {
private static Log log = LogFactory.getLog(JobC.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("JobC doit ......");
}
}
多任务的测试类:
package com.test.quartz;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.test.quartz.jobs.JobA;
import com.test.quartz.jobs.JobB;
import com.test.quartz.jobs.JobC;
public class CronTriggerExample {
private static Log log = LogFactory.getLog(CronTriggerExample.class);
public static void main(String[] args) throws Exception {
JobKey jobKeyA = new JobKey("jobA", "group1");
JobDetail jobA = JobBuilder.newJob(JobA.class).withIdentity(jobKeyA).build();
JobKey jobKeyB = new JobKey("jobB", "group1");
JobDetail jobB = JobBuilder.newJob(JobB.class).withIdentity(jobKeyB).build();
JobKey jobKeyC = new JobKey("jobC", "group1");
JobDetail jobC = JobBuilder.newJob(JobC.class).withIdentity(jobKeyC).build();
Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
Trigger trigger2 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName2", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();
Trigger trigger3 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName3", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobA, trigger1);
scheduler.scheduleJob(jobB, trigger2);
scheduler.scheduleJob(jobC, trigger3);
}
}
来点总结: