1.导入jar(pom.xml)
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2.自定义任务实现job接口
package com.tls.timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("current time is:"+sdf.format(date));
System.out.println(context.getJobDetail().getKey().getName()+"+"+context.getJobDetail().getKey().getGroup());
// System.out.println(context.getTrigger().getKey().getName()+"+"+context.getTrigger().getKey().getGroup());
// System.out.println(context.getJobDetail().getJobDataMap().get("message"));
// System.out.println(context.getTrigger().getJobDataMap().get("message"));
System.out.println(Thread.currentThread().getName()+"-------");
}
}
3.进行任务调度
package com.tls.timer;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class HelloScheduler {
public static void main(String[] args) throws Exception{
JobDataMap jobMap=new JobDataMap();
jobMap.put("message", "myJob group1 message");
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1")
.usingJobData(jobMap)
.build();
JobDetail jobDetail2=JobBuilder.newJob(HelloJob.class).withIdentity("myJob2", "group1")
.usingJobData(jobMap)
.build();
Trigger trigger=TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData("message", 2D)
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
.build();
Trigger trigger2=TriggerBuilder.newTrigger()
.withIdentity("myTrigger2", "group1")
.usingJobData("message", 2D)
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
.build();
SchedulerFactory factory=new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.scheduleJob(jobDetail2, trigger2);
// scheduler.scheduleJob(jobDetail2, trigger);
// Thread.sleep(10000);
// scheduler.pauseJob(jobDetail.getKey());
// Thread.sleep(5000);
// scheduler.resumeJob(jobDetail.getKey());
}
}
package com.tls.timer;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class MutilJobScheduler {
public static void main(String[] args) throws Exception{
SchedulerFactory factory=new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
Calendar start=Calendar.getInstance();
start.set(Calendar.HOUR_OF_DAY, 8);
start.set(Calendar.MINUTE, 42);
Calendar end=Calendar.getInstance();
end.set(Calendar.HOUR_OF_DAY, 8);
end.set(Calendar.MINUTE, 43);
// for(int i=0;i<20;i++){
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
//秒 分 小时 日 月 周 年(可以缺省)
Trigger trigger=TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData("message", 2D)
// .startAt(start.getTime())
// .endAt(end.getTime())
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ? *"))
.build();
Trigger trigger2=TriggerBuilder.newTrigger()
.withIdentity("myTrigger2", "group1")
.usingJobData("message", 2D)
.startAt(start.getTime())
.endAt(end.getTime())
.withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * * * ? *"))
.build();
scheduler.scheduleJob(jobDetail, trigger);
// scheduler.scheduleJob(jobDetail, trigger2);
// }
List<JobExecutionContext> currentlyExecutingJobs = scheduler.getCurrentlyExecutingJobs();
Thread.sleep(2000*10);
scheduler.deleteJob(new JobKey("myJob1", "group1"));
System.out.println(currentlyExecutingJobs.size());
// scheduler.shutdown(true);
}
}
SimpleScheduleBuilder:简单的日期调度,可以按时间间隔,重复调度次数进行触发
CronScheduleBuilder:Cron风格的日期调度
可以设置任务的开始时间和结束时间
任务执行时,可以使用JobExecutionContext中的getJobDetail().getJobDataMap()携带数据
可以删除任务,清空任务,暂停任务,恢复任务等