定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的时候,就需要去改动代码,还得启停服务器,这是非常不友好的事情
直至遇见 Quartz,利用图形界面可视化管理定时任务,使得我们对定时任务的管理更加方便,快捷
一、Quartz 简介
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构 建,JavaMail及其它,支持cron-like表达式等等。
二、开发前戏
1、引入 maven 依赖
<!-- web支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Quartz 定时任务 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
这里引入了 web 的依赖,以及 Quartz 的依赖,其余依赖请根据需求自行引入
2、创建数据表
数据模型:
SQL语句:
drop table if exists sys_quartz; /*==============================================================*/ /* Table: sys_quartz */ /*==============================================================*/ create table sys_quartz ( id bigint(20) not null auto_increment comment '主键id', class_name varchar(32) comment '任务类名', cron_expression varchar(32) comment 'cron表达式', param varchar(32) comment '参数', descript varchar(11) comment '描述', quartz_status varchar(255) comment '启动状态(0--启动1--停止)', create_time datetime comment '创建时间', create_user bigint(20) comment '创建人', status tinyint(1) default 0 comment '状态(0--正常1--停用)', del_flag tinyint(1) default 0 comment '删除状态(0,正常,1已删除)', primary key (id) ) type = InnoDB; alter table sys_quartz comment '定时任务信息表';
三、开发进行中
1、创建实体类
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.zyxx.common.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; /** * <p> * 定时任务信息表 * </p> * * @author lizhou * @since 2020-07-21 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sys_quartz") @ApiModel(value="SysQuartz对象", descriptio<strong style="color:transparent">来源gaodai#ma#com搞@代~码$网</strong>n="定时任务信息表") public class SysQuartz extends Model<SysQuartz> { @ApiModelProperty(value = "主键id") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "任务类名") @TableField("class_name") private String className; @ApiModelProperty(value = "cron表达式") @TableField("cron_expression") private String cronExpression; @ApiModelProperty(value = "参数") @TableField("param") private String param; @ApiModelProperty(value = "描述") @TableField("descript") private String descript; @ApiModelProperty(value = "启动状态(0--启动1--停止)") @TableField("quartz_status") private Integer quartzStatus; @ApiModelProperty(value = "状态(0--正常1--停用)") @TableField("status") private Integer status; @ApiModelProperty(value = "删除状态(0--未删除1--已删除)") @TableField("del_flag") @TableLogic private Integer delFlag; @ApiModelProperty(value = "创建者") @TableField("create_user") private Long createUser; @ApiModelProperty(value = "创建时间") @TableField("create_time") private String createTime; @Override protected Serializable pkVal() { return this.id; } }