在选择技术栈之前,一定要先明确一件事情,你真的需要用它吗?还有其他方式可以使用吗?
相比其他技术技术,优点在哪里呢?使用了之后的利与弊等等。
写这个主要是因为一直想写一下定时任务这个主题,这个算是写那篇文前期的铺垫和基础吧~
本文没有聊到 Java
其他的实现定时任务的方法啥的~,只是对使用 Quartz 做了一个小实践
一、简单聊一聊 Quartz
Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz 其实就是通过一个调度线程不断的扫描数据库中的数据来获取到那些已经到点要触发的任务,然后调度执行它的。这个线程就是 QuartzSchedulerThread类。其run方法中就是quartz的调度逻辑。
另外,这是一个Demo,木有考虑并发、多任务执行等等状态的发生及处理情况,见谅。
1.1、Quartz 概念
Quartz 的几个核心概念
-
Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context) 复制代码
-
JobDetail表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
-
Trigger代表一个调度参数的配置,什么时候去调。
-
Scheduler代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
二、SpringBoot 使用 Quartz
2.1、基本步骤
基本步骤就那些,这篇也不是高大上讲原理和流程之类的,就是偏向实操,可能一些地方在代码中含有注释,就不再贴说明了~
基本:JDK 8、SpringBoot、MybatisPlus、Quartz
创建一个 SpringBoot 项目
导入相关依赖~
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
</dependencies>
项目结构:

2.2、执行 Quartz 需要的SQL文件
找到 quartz 需要的 sql 文件,在数据库中执行,这也是Quartz持久化的基础~

往下滑,找到你需要的sql文件即可。
执行完的结果:
