一.Quartz介绍
任务调度框架“Quartz”是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,
“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。
简单来说就是实现“计划(或定时)任务”的系统,例如:订单下单后未付款,15分钟后自动撤消订单,并自动解锁锁定的商品
二. Quartz的触发器
触发器用来告诉调度程序作业什么时候触发。框架提供了5种触发器类型,但两个最常用的SimpleTrigger和CronTrigger。
五种类型的Trigger(定时器)
SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar类( org.quartz.Calendar)。
场景:
SimpleTrigger:执行N次,重复N次
CronTrigger:几秒 几分 几时 哪日 哪月 哪周 哪年,执行
三.Quartz相关表达式
在线生成表达式网址:http://cron.qqe2.com/
1.pom依赖
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
2.创建一个类用来开启定时任务
public class RamJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("启动定时任务......");
//写要执行的代码块
JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap();
System.out.println( jobDataMap.get("level")+" "+jobDataMap.get("job"));
}
}
3.在写一个test类
package com.springboot.quartz01;
import com.zking.quartz01.quartz.RamJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.newJob;
/**
* @author小何
* @site www.heweimage.com
* @company xxx公司
* @create 2019-02-23 15:41
*/
public class QuartzTest {
public static void main(String[] args) throws SchedulerException {
//创建调度器
//将具体的作业类(RamJob)绑定到调度任务详情中
//创建触发器
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
JobDetail jobDetail = newJob(RamJob.class)
.withDescription("this is a job")
.usingJobData("level","老")
.withIdentity("job1")
.build();
//传值所用
JobDataMap jobDataMap = jobDetail.getJobDataMap();
jobDataMap.put("job","司机");
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription("this is a triagger")
// .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(3,10))
.withSchedule(CronScheduleBuilder.cronSchedule("0 28 16 * * ?"))
.withIdentity("trigger1","group1")
.build();
//将触发器以及调度任务详情绑定到调度器上
scheduler.scheduleJob(jobDetail,trigger);
//启动调度器
scheduler.start();
}
}