1. 概念
Scheduler - 定时任务的调度器,定义了定时任务的外部交互接口。
Job - 需要执行的任务必须要集成该接口,并实现excute方法,任务逻辑包含在excute中
JobDetail - 执行任务的实例,包含了任务的实现类,任务的参数
Trigger(即触发器) - 定义了任务什么时候开始
JobBuilder - 用于定义/构建 JobDetail 实例,用于定义作业的实例。
TriggerBuilder - 用于定义/构建触发器实例
2. 构建简单的定时任务
新建一个Job
import org.quartz.Job;
import org.quartz.JobExecutionContext;
public class DemoJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
System.out.println("执行任务逻辑:param1=" + jobDataMap.get("param1") + "param2=" + jobDataMap.get("param2"));
}
}
构建任务调度器
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.concurrent.TimeUnit;
public class Demo {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//创建一个调度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//新建一个任务实例
JobDetail jobDetail = JobBuilder.newJob(DemoJob.class)//这里是实例的类
.withIdentity("demoJob", "demo")
.usingJobData("param1", 1)
.usingJobData("param2", "参数2")//这里传入参数
.build();
//新建一个任务触发器
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.startNow()//立即生效
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)//每隔1s执行一次
.withRepeatCount(10))//执行10次
.build();
scheduler.scheduleJob(jobDetail, trigger);
//启动调度器,这里异步启动,不影响后面的逻辑
scheduler.start();
TimeUnit.SECONDS.sleep(15);//等待15秒
//关闭调度器,调度器内的任务全部终止
scheduler.shutdown();
}
}