一、Quartz简介
Quartz是一个完全由java编写的轻量级开源作业调度框架,几乎包含了了所有的定时功能,它可以应用到任何java系统中,他可以持久化我们的定时任务
二、简单的使用
1、创建maven项目,引入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
2、使用Quartz API
public class QuartzSimpleDemo {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//通过任务调度器工厂创建任务调度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//创建任务调度模型
ScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)//执行时间间隔是5秒
.repeatForever();//一直执行,可以被调度器中断
//定义触发器,定义触发条件
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1","myGroup1")//设置触发器的id和group
.withSchedule(scheduleBuilder)//设置使用的调度模型
.startNow()//一加入scheduler就执行
.build();
//定义任务,做任务的是MyJob.execute()方法
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity("job1","myGroup2")//设置任务的id和group
.usingJobData("name","test my job")//任务中传递参数,底层就是个map
.build();
//将任务加入调度器
scheduler.scheduleJob(jobDetail,trigger);
//调度器调度任务
scheduler.start();
Thread.sleep(10000);
//调度器关闭,true表示等待任务全部完成,false反之
scheduler.shutdown(true);
}
}
class MyJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
//通过context获取JobDetail
JobDetail jobDetail = context.getJobDetail();
//通过context获取trigger
Trigger trigger = context.getTrigger();
System.out.println("hello world");
}
}
3、说明
Scheduler:调度器,是Quartz的核心,包括下列方法(未列全),源码中每种方法都有详细的说明
ScheduleBuilder:这里有如下四种
本例子中是使用的最简单的一种,每一种的功能和使用方法在源码和官方文档中都有详细的介绍。
Trigger:触发器,withIdentity(String,String)设置触发器的唯一标识和设置触发器的分组。我们可以通过startAt()和endAt设置任务触发时间和结束时间。在这段时间之外不会触发任务。withPriority()可以设置任务的优先级。有如下实现类
JobDetail:任务的详细内容,必须设置执行任务的类,withIdentity(String,String)设置任务的唯一标识和设置任务的分组。
其他:Trigger.usingJobData()和JobDetail.()usingJobData的作用都一样。
设置id和group的作用就是为了调度器更好的管理和调度任务,sheduler会提供一些对整组操作的API。