package com.bobo.quartz;
import com.bobo.quartz.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
* @author bobo
* Created by bobo on 2018/5/16/20:59.
*/
/**
* Quartz API的关键接口是:
* Scheduler - 与调度程序交互的主要API。
* Job - 由希望由调度程序执行的组件实现的接口。
* JobDetail - 用于定义作业的实例。
* Trigger(即触发器) - 定义执行给定作业的计划的组件。
* JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
* TriggerBuilder - 用于定义/构建触发器实例。
*/
/**
* Scheduler的生命期,从SchedulerFactory创建它时开始,
* 到Scheduler调用shutdown()方法时结束;Scheduler被创建后,
* 可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作(如暂停Trigger)。
* 但是,Scheduler只有在调用start()方法后,才会真正地触发trigger(即执行job)。
*/
/**
* 触发器的方式有两种,一种是SimpleTrigger,作用是执行一次性的任务,或者是在特定的时间
* 点执行,重复N次,每次执行的间隔是T个时间单位。
* 一种是CronTrigger,和linux中的定时任务一致,可以看做是基于日历的调度。
* 两种调度方式。
* 第一种是:
* //方式一:
* Trigger trigger1 = TriggerBuilder
* .newTrigger()
* .withIdentity("我的第一个触发器", "group1")
* .withSchedule(
* SimpleScheduleBuilder.simpleSchedule()
* .withIntervalInSeconds(5).repeatForever())
* .build();
* 第二种是:
* //方式二:
* Trigger trigger2 = TriggerBuilder
* .newTrigger()
* .withIdentity("我的第二个触发器", "group1")
* .withSchedule(
* CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
* .build();
*其中需要强调的是name、group、key的作用
* 在其官方文档中提到
* * <p>
* <code>Job</code> s and <code>Trigger</code> s have a name and group
* associated with them, which should uniquely identify them within a single
* <code>{@link Scheduler}</code>. The 'group' feature may be useful for
* creating logical groupings or categorizations of <code>Jobs</code> s and
* <code>Triggers</code>s. If you don't have need for assigning a group to a
* given <code>Jobs</code> of <code>Triggers</code>, then you can use the
* <code>DEFAULT_GROUP</code> constant defined on this interface.
* </p>
* 翻译过来的意思是说:job和trigger有一个关联的name和group,这两者可以唯一标识他们。
* group特性可以用来创建逻辑分组或者对于job和trigger分类。如果你不需要
* 分类,你可以使用这个接口上定义的DEFAULT_GROUP常量。
* 将Job和Trigger注册到Scheduler时,可以为它们设置key,
* 配置其身份属性。Job和Trigger的key(JobKey和TriggerKey)可以用于将Job和Trigger放到不同的分组(group)里,
* 然后基于分组进行操作。同一个分组下的Job或Trigger的名称必须唯一,
* 即一个Job或Trigger的key由名称(name)和分组(group)组成。
*
*/
public class QuartzTest02 {
public static void main(String[] args) throws SchedulerException {
//调度工具
SchedulerFactory factory=new StdSchedulerFactory();
//获取调度实例
Scheduler scheduler=factory.getScheduler();
//开始一个调度
scheduler.start();
//用于定义作业的实例,其中hellojob实现了job这个接口
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob","group1")
.build();
//触发器,定义执行给定作业的计划的组件
Trigger trigger=TriggerBuilder.newTrigger()
.withIdentity("myTrigger","group1")
.startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
scheduler.scheduleJob(jobDetail,trigger);
}
}
|