layout: blog
istop: true
title: “springboot 整合quartz (一):基础使用”
date: 2018-10-09
category: springboot
tags:
- springboot
- quartz
介绍
Quartz是一个开源的作业调度
框架,它完全由Java
写成。它有很多特征,如:数据库支持,集群,插件,EJB作业预构 建,JavaMail及其它,支持cron-like表达式
等等。该项目已经被 Terracotta
收购。
Quartz API 介绍
Quartz API关键几个接口如下:
接口类对象:
- Scheduler:跟任务调度相关的最主要的API接口。
- Job:你期望任务调度执行的组件定义(调度器执行的内容),都必须实现该接口。
- Trigger:定义一个指定的Job何时被执行的组件,也叫触发器。
用于创建示例的对象:
- JobDetail:用来定义Job的实例。
- JobBuilder:用来定义或创建JobDetail的实例,JobDetail限定了只能是Job的实例。
- TriggerBuilder:用来定义或创建触发器的实例。
环境
- idea
- maven
- springboot
案例
入门案例-1
说多少也不如直接运行代码出结果来的实际,?那就动手了。
pom.xml 配置如下:
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
job类
@Data
public class HelloJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
String name = jobDataMap.get("name").toString();
String characteristic = jobDataMap.get("characteristic").toString();
System.out.println("name : " + name);
System.out.println("characteristic : " + characteristic);
}
}
QuartzTest类
public class QuartzTest {
public static void main(String[] args) throws SchedulerException, ParseException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
// 定义job,绑定我们的定时任务
JobDetail job2 = newJob(HelloJob.class)
.usingJobData("name", "张三")
.usingJobData("characteristic", "帅3")
.build();
// 执行任务,用定义好的触发器 和 任务
scheduler.scheduleJob(job2, getTrigger6());
}
/**
* 触发器立即触发,然后每隔2秒 触发一次,22:55:00:
*/
private static Trigger getTrigger1() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//定义一个任务触发器
return newTrigger()
.withIdentity("job2", "group2")
//定点触发
//.startAt(sdf.parse("2018-09-27 10:27:00"))
// 五秒钟后触发
.startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND))
.withSchedule(simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
//.withRepeatCount(0))
.endAt(DateBuilder.dateOf(22, 55, 0))
.build();
}
运行测试类,结果如下:(恭喜你,?成功,接下来,就是深入学习了)
10:29:11.012 [MyOneQuartzScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.6da64b5bd2ee-f1562ba3-b8fa-436d-848e-d6e8ea39c26d
name : 张三
characteristic : 帅3