quertz是一个定时任务框架,支持使用基于数据库的分布式
现在这直接来看一下这个框架该如何使用吧
体系架构
- Job
是⼀个接⼝,只定义⼀个⽅法execute(JobExecutionContext context),在实现接⼝的execute
⽅法中编写所需要定时执⾏的Job(任务), JobExecutionContext类提供了调度应⽤的⼀些信息。
Job运⾏时的信息保存在JobDataMap实例中。
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
/**
- 任务内容
*/
public class MyJob implements Job{
public void execute(JobExecutionContext jobExecutionContext) throws
JobExecutionException {
// 输出系统当前时间
System.out.println(new Date());
构建调度任务
}
}
- 2JobDetail
JobDetail 定义的是任务数据,⽽真正的执⾏逻辑是在Job中。sheduler每次执⾏,都会根据
JobDetail创建⼀个新的Job实例。
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
/**
* 构建调度任务
*/
public class QuartzTest {
public static void main(String[] args) throws SchedulerException {
// 获取调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 包装任务内容
JobDetail job = newJob(MyJob.class)
.withIdentity("job1", "group1")
.build();
// 定义触发器
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
. repeatForever())
.build();
// 组装任务
scheduler.scheduleJob(job, trigger);
// 启动调度器 开始调度
scheduler.start();
}
}
Trigger是什么
Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的。
JobKey:表示job实例的标识,触发器被触发时,该指定的job实例会执行
StartTime:表示触发器的时间表 首次被触发的时间,值类型是Java.util.Date
EndTime:指定触发器的不再触发的时间,它的值类型是Java.util.Date
https://www.cnblogs.com/qlqwjy/p/8721963.html可看
Scheduler
代表⼀个Quartz的独⽴运⾏容器, Trigger和JobDetail可以注册到Scheduler中, 两者在
Scheduler中拥有各⾃的组及名称, 组及名称是Scheduler查找定位容器中某⼀对象的依据,
Trigger的组及名称必须唯⼀, JobDetail的组和名称也必须唯⼀(但可以和Trigger的组和名称相
同,因为它们是不同类型的)。Scheduler定义了多个接⼝⽅法, 允许外部通过组及名称访问和
控制容器中Trigger和JobDetail。
JobBulider
⽤于定义/构建已经定义了Job实例的JobDetail实例