添加pom.xml <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs --><dependency><g
添加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); }}
来点总结: