概述
Quartz可分为 Job Trigger Scheduler 三大块
Job主要有三个类和接口
- org.quartz.Job 用于实现要做的事
- org.quartz.JobDetail 用于包装Job,要把Job变为JobDetail
- org.quartz.JobBuilder 用于把Job变为JobDetail
用法, 实现Job👇
public class JobImpl implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
//这里写要做些什么,比如👇
System.out.println(context.getFireTime());
}
}
然后用 JobBuilder 把 Job 变为 JobDetail👇
JobDetail jobDetail = JobBuilder.newJob(JobImpl.class)
.withIdentity("job1", "group1")
.build();
用TriggerBuilder获得多种Tigger,比如 CronTrigger
CronTrigger👇
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))
.build();
SchedulerFactory创建Scheduler
SchedulerFactory sf = new StdSchedulerFactory();
try{Scheduler sched = sf.getScheduler();}
catch(SchedulerException e){//sf.getScheduler()方法要捕获或抛出异常}
把 JobDetail 和 Trigger 放入 Scheduler 然后start();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
1个JobDetail可以对应多个Trigger1个Trigger 只能对应 1个JobDetail
例子
maven pom.xml引入
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
简单的Cron例子
实现Job👇
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class JobImpl implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
//这里写要做些什么,比如👇
System.out.println(context.getFireTime());
}
}
主程序启动👇
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.impl.StdSchedulerFactory;
public class App
{
public static void main( String[] args )
{
SchedulerFactory sf = new StdSchedulerFactory();
try {
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(JobImpl.class)
.withIdentity("job1", "group1")
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))
.build();
sched.scheduleJob(jobDetail, trigger);
sched.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
简单的Cron封装👇
使用了静态引入
import org.quartz.*;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import org.quartz.impl.StdSchedulerFactory;
public class Cron {
public SchedulerFactory schedulerFactory;
public Scheduler scheduler;
public JobDetail jobDetail;
public Cron(SchedulerFactory sf , Class <? extends Job> jobClass , String cron) {
schedulerFactory = sf;
try {
Scheduler sched =scheduler= sf.getScheduler();
JobDetail j =jobDetail= newJob(
jobClass
)
.withIdentity("job1", "group1")
.build();
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(cronSchedule(cron))
.build();
sched.scheduleJob(j, trigger);
sched.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public Cron(Class <? extends Job> jobClass , String cron) {
this(new StdSchedulerFactory(),jobClass,cron);
}
public void shutDown() {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static void main(String...arguments) throws Exception{
Cron c = new Cron(JobImpl1.class, "0/3 * * * * ?");
Thread.sleep(10000);
c.shutDown(); //shutDown默认true等待最后的触发执行完毕
}
}