为什么需要Quartz
quartz:石英钟的意思,由OpenSymphony开源组织开发,
是java编写的,我们使用时需要导入依赖即可是一个当今市面上流行的高效的任务调度管理工具
。
所谓"调度"就是制定好的什么时间做什么事情的计划
我们使用过的最简单的调度方法就是:Timer
但是Timer的调度功能过于单一,只能是指定时间的延时调用和周期运行
而Quartz可以更详细的指定时间,进行计划调用
SpringBoot使用Quartz
pom依赖
下面展示 pom依赖
。
<!-- SpringBoot整合Quartz依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
quartz包,创建一个QuartzJob的类,实现Job接口
下面展示一些 内联代码片
。
public class QuartzJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 实现一个简单的任务做演示
// 例如输出当前时间
System.out.println("-------"+ LocalDateTime.now() +"--------");
}
}
上面编写的是Job接口的实现类,要想运行还需要将它封装为JobDetail对象保存在Spring容器中
还有要创建一个Trigger设置要运行的时机,也保存到Spring容器中
在quartz包下,再创建一个QuartzConfig类,其中编写它们的调度绑定关系
这个格式是固定的,后面再需要绑定,直接套用即可
保存到Spring容器+绑定代码
下面展示 保存到Spring容器+绑定代码
。
// 要配置Quartz的调度器Scheduler
// 调度器由SpringBoot管理,所以就变成了配置Spring
@Configuration
public class QuartzConfig {
// 配置的核心是向Spring容器保存一个job和保存一个Trigger
// 创建一个封装Job对象的类型JobDetail
// 使用@Bean注解标记的方法将这个对象保存到Spring容器
@Bean
public JobDetail showTime(){
System.out.println("jobDetail保存到Spring容器");
//newJob方法就是在绑定要运行的Job接口实现类,需要实现类的反射做参数
return JobBuilder.newJob(QuartzJob.class)
// 给当前JobDetail对象在调度环境中起名
.withIdentity("dateTime")
// 即使没有触发器绑定当前JobDetail对象,也不会被删除
.storeDurably()
.build();
}
// 下面是触发器的声明,也会保存到Spring容器中
// 它能够设置job的运行时机
@Bean
public Trigger showTimeTrigger(){
System.out.println("Trigger保存到Spring容器中");
// 定义Cron表达式
CronScheduleBuilder cron=
CronScheduleBuilder.cronSchedule("0 0/2 * * * ?"");
return TriggerBuilder.newTrigger()
// 绑定要运行的JobDetail对象
.forJob(showTime())
// 为触发器起名
.withIdentity("dateTrigger")
// 绑定cron表达式
.withSchedule(cron)
.build();
}
}
Quartz核心组件
任务:job
触发器:Trigger
调度器来配置\计划什么时间触发什么任务
简单来说就是调度器规定什么时间做什么事情
- job(工作\任务):Quartz 实现过程中是一个接口,接口中有一个方法execute(执行的意思)
我们创建一个类,实现这个接口,在方法中编写要进行的操作(执行具体任务)
我们还需要一个JobDetail的类型的对象,Quartz每次执行job时
会实例化job类型对象,去调用这个方法,JobDetail是用来描述Job实现类的静态信息,
比如任务运行时在Quartz中的名称
-
Trigger(触发器):能够描述触发指定job的规则,分为简单触发和复杂触发
简单触发可以使用SimplTrigger实现类.功能类似timer
复杂触发可以使用CronTrigger实现类,内部利用cron表达式描述各种复杂的时间调度计划
-
Scheduler(调度器):一个可以规定哪个触发器绑定哪个job的容器
在调度器中保存全部的Quartz 保存的任务
SpringBoot框架下,添加Quartz依赖后,调度器由SpringBoot管理