Quartz API中的主要接口
- Scheduler:包含JobDetail和Trigger的注册信息,负责执行job(当其关联的Trigger启动时)
- Job :被Scheduler调用执行
- JobDetail :定义Job
- Trigger :定义给定Job的哪个schedule执行
- JobBuilder :定义/创建 JobDetail对象
- TriggerBuilder :定义/创建Trigger对象
一个Scheduler的生命周期,通过SchedulerFactory的创建开始,直到其调用shutdown()方法结束。一旦Scheduler被创建了就可以添加、移除、列举Job和Trigger,并且能执行其他和调度相关的操作。然而,除非Scheduler通过调用start() 方法启动了,否则它不能作用于任何trigger。
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("myJob", "group1") // name "myJob", group "group1"
.build();
// Trigger the job to run now, and then every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("myTrigger", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
上面的这块代码,创建了Job的定义和trigger,分别用了JobBuilder类的静态方法newJob()和TriggerBuilder类的静态方法newTrigger()。
重要的静态导入:
import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.DateBuilder.*;
Job && Triggers
一个Job是一个实现了Job接口的类。
Job接口只有一个方法:
public interface Job {
void execute(JobExecutionContext var1) throws JobExecutionException;
}
当这个Job的trigger启动了, execute(..) 方法就会被某个工作线程唤醒。
JobExecutionContext这个对象,携带job实例的运行时的环境信息传递给该方法,这些信息包括执行这个job的Scheduler信息、Trigger信息、JobDetail信息以及一些其他信息。
当Job被添加到scheduler后,JobDetail对象就创建了。JobDetail包含Job的许多属性设置,看作为一个JobDataMap,即存储了Job实例的信息。
Trigger对象用于触发job的执行。常用的类型有SimpleTrigger和CronTrigger。
SimpleTrigger:执行一次,重复n次
CronTrigger:基于日历执行