简单使用Quartz
通过SchedulerFactory
实例化scheduler
,一旦scheduler
被实例化,它就可以被启动,处于待机模式,然后关闭。注意,一旦scheduler
被关闭,它就不能再次启动。Trigger
不会触发(job不会执行),直到scheduler
启动,或者处于暂停态。
这里是一个代码片段,它实例化和启动了一个scheduler,并调度了一个job:
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("myJob", "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);
Quartz几个常用的API
- Scheduler :用于与调度程序交互的主程序接口。
- Job:预先定义的希望在未来时间被调度程序执行的任务类,自定义。
- JobDetall :使用JobDetail来定义定时任务的实例,JobDetail实例是通过JobBuilder类创建。
- JobDataMap :可包含数据对象,在job实例执行的时候,可使用包含的数据;JobDataMap是java Map接口的实现,增加了一些存取基本类型方法。
- Trgger触发器 :Trigger对象是用于触发执行Job的,当调度一个Job时,我们实例一个触发器然后调整它的属性来满足Job执行的条件,表明任务在什么时候执行。定义了一个已经被安排的任务将在什么时候执行的时间条件,比如每秒执行一次。
- JobBuilder :用于声明一个任务实例,也可以定义关于该任务的详情比如:任务名,组名等,这个声明的实例将作为一个实例执行的任务。
- TriggerBuilder :触发器创建器,用于创建触发器trigger实例。
- JobListener,TriggerListener,SchedulerListener监听器,用于对组件的监听。
核心API :Scheduler,Job,Trgger简单认识
- Scheduler调度器
Scheduler的生命周期起始于SchedulerFactory对它的创建,终止于调用shutdown方法对它关闭。一旦创建,就可以用Scheduler接口添加、移除、查询Job和Trigger,也可以执行与调度有关的操作(例如暂停trigger)。然而,如果没有调用start方法,Scheduler不会执行任何trigger(执行job)。 - Job任务
一个Job就是一个实现了Job接口的类,它只有一个简单的方法:
package org.quartz;
public interface Job {
public void execute(JobExecutionContext context)
//自定义Job内容
throws JobExecutionException;
}
我们可以定义多个这样的实现类用来实现不同的任务,然后通过触发器来触发,一个Job可以指定多个触发器。
3. Trgger触发器
Trgger触发器用来按指定时间或者定时来执行一个Job,最常用的类型是SimpleTrigger和CronTrigger。如果你只需要执行一次,或者在给定的时间点启动job,并以时间间隔T,重复执行N次,那么SimpleTrigger是很方便的。如果你想要按照类似于日历的计划触发:例如每天中午、每月10号10:15,那么CronTrigger就很有用了。
4. Job和Trgger 的标识
Job和Trigger要给定标识符,因为它们要注册到Quartz scheduler中。Job和Trigger (JobKey和TriggerKey)的key允许它们放置到“组”中,分组对于job和trigger的归类是很有用的,例如“报告作业”和“维护作业”。Job和trigger的key的名字部分必须在组内是唯一的:换句话说,job和trigger的完整的key(或标识符)是名字和组的组合。
评论区