一、了解Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制,可以与 J2EE与 J2SE应用程序相结合使用也可以单独使用。其允许程序开发人员根据时间的间隔来调度作业。
Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。
Quartz 的几个核心概念:
1.Job 表示一个工作,要执行的具体内容。此接口中只有一个方法void execute(JobExecutionContext context)
2.JobDetail 表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
3.Trigger 代表一个调度参数的配置,什么时候去调。
4.Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
二、Quartz的第一种使用方式
上面说到了Quartz既可以与 J2EE以及 J2SE应用程序相结合使用也可以单独使用,这里就先介绍一下单独使用的方法。
既然是单独使用,也就是说我们只需要一个main函数就可以开始一个调度任务。在进行Quartz调度时,最重要的三部分就是Job、Trigger、Scheduler,分别为任务、触发器和调度器。
把三者的关系打个比方,Scheduler就像是Boss主公,他是整个团队的核心领袖,负责整个调度运行的环境。而Trigger就像是谋士军师,他有整个工作要如何运行的标准。最后的Job就像是小兵,来执行老板下发的命令,以及Trigger告诉他要如何执行怎么执行,这样Job就去做准确的调度任务(可能不是特别准确,大家自己理解一下)。
第一步,需要添加Quartz依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
首先,创建我们的调度任务类,该类实现 Job接口,只有一个execute方法需要重写,我们把需要的相关业务代码写在此方法中,最后会将该方法加入调度器中执行。
/**
* @author Edwin
* @description 调度任务类
**/
public class QuartzTaskJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("执行目标操作中...");
}
}
第二部分代码便是上面提到的,需要创建调度器 Scheduler、触发器 Trigger、及任务实例Job,这样我们就可以对该任务进行以我们赋予的标准或规则进行调度,下面是main函数中的代码
/**
* @author Edwin
* @description 调度控制类
**/
public class MyScheduler {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//创建调度器Scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(QuartzTaskJob.class)
.withIdentity("jobDetail", "group1").build();
//创建触发器Trigger
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "groupOfTrigger1")
.startNow()