任务调度框架“Quartz” :
是OpenSymphony开源组织在Job scheduling领域又一个开源项目
是完全由java开发的一个开源的任务日程管理系统
定时器的含义呢 就比如像购物车 美团外卖呀 订了购物单 而并不付款 订单还在 并说明在多少分钟之后会自动关闭该订单 这个就需要用到Quartz定时器去给程序关闭订单 就和早晨的闹钟一样定时分配任务 到了规定的时间段就会执行任务
这个就是Quartz意义
Quartz几个核心类之间的的关系 我这边是说明几个重点核心类之间的关系并且要被运用到项目之中的
第一个QuartzScheduler
1:是Quartz的主要核心
2:包含调度org.quartz.Jobs,
3:注册org.quartz.JobListener实例等的方法。
4:它是org.quartz.Scheduler接口的间接实现
第二个Schedule
1:这是Quartz Scheduler的主要接口,
2:代表一个独立运行容器。
3:调度程序维护JobDetails和触发器的注册表。
4:一旦注册,调度程序负责执行作业,当他们的相关联的触发器触发(当他们的预定时间到达时)。
第三个 Trigger
1:具有所有触发器通用属性的基本接口
2:描述了job执行的时间出发规则。
3:使用TriggerBuilder实例化实际触发器。
第四个JobDetail
1:传递给定作业实例的详细信息属性。
2:JobDetails将使用JobBuilder创建/定义
第五个 Job
1:要由表示要执行的“作业”的类实现的接口。只有一个方法
void execute(jobExecutionContext context)
(jobExecutionContext 提供调度上下文各种信息,运行时数据保存在jobDataMap中)
Job有个子接口StatefulJob ,代表有状态任务。
2:有状态任务不可并发,前次任务没有执行完,后面任务处于阻塞等到
这就是Quartz定时器
然后首先定义一个定时器 简单的入门
第一步导入pom依赖
导入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
第二步创建 自定义的RamJob
必须实现org.quartz.Job接口
package com.ch.quartz.demo.quartz;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class MyJob implements Job{
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap jobDataMap=jobExecutionContext.getMergedJobDataMap();
System.out.println(jobDataMap.get("uname"));
System.out.println("任务运行中" + new Date().toLocaleString());
}
}
创建Demo类 这个类方法可以不需要写 因为大部分定时器已经写好了 我们直接运用他们写好的就好了
copy就好
package com.ch.quartz.demo.quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import java.util.Date;
public class Demo1 {
public static void main(String[] args) throws Exception {
//1.创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
//2.从工厂中获取调度器实例
Scheduler scheduler = sf.getScheduler();
//3.创建JobDetail(作业信息)
JobDetail jb = JobBuilder.newJob(MyJob.class)
.withDescription("this is a ram job") //job的描述
.withIdentity("ramJob", "ramGroup") //job 的name和group
.build();
//向任务传递数据
JobDataMap jobDataMap = jb.getJobDataMap();
jobDataMap.put("uname", "张三");
//任务运行的时间,SimpleSchedle类型触发器有效
long time = System.currentTimeMillis() + 3 * 1000L; //3秒后启动任务
Date statTime = new Date(time);
//4.创建Trigger
//使用SimpleScheduleBuilder或者CronScheduleBuilder
Trigger t = TriggerBuilder.newTrigger()
.withDescription("")
.withIdentity("ramTrigger", "ramTriggerGroup")
.startAt(statTime) //默认当前时间启动
//.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).withRepeatCount(3))//间隔3秒,重复3次
.withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")) //3秒执行一次
.build();
//5.注册任务和定时器
scheduler.scheduleJob(jb, t);
//6.启动 调度器
scheduler.start();
}
}
在这个里面 重要的地方就是
第四点
.withSchedule(CronScheduleBuilder.cronSchedule(“0/3 * * * * ?”)) //3秒执行一次
这个是一个表达式 表示在什么时候运行你所需要的规定
这些星号由左到右按顺序代表 : * * * * * * *
格式: [秒] [分] [小时] [日] [月] [周] [年]
关键的单词:
Scheduler:调度程序,日程安排程序
Job:作业,工作
这个就是Quartz 因为自己做的是springboot和他的整和应用
关于表达式可以搜索编辑器