SpringBoot结合XXL-JOB实现定时任务
作者:mmseoamin日期:2023-12-05

《从零打造项目》系列文章

工具

  • 比MyBatis Generator更强大的代码生成器

ORM框架选型

  • SpringBoot项目基础设施搭建
  • SpringBoot集成Mybatis项目实操
  • SpringBoot集成Mybatis Plus项目实操
  • SpringBoot集成Spring Data JPA项目实操

数据库变更管理

  • 数据库变更管理:Liquibase or Flyway
  • SpringBoot结合Liquibase实现数据库变更管理

定时任务框架

  • Java定时任务技术分析
  • SpringBoot结合Quartz实现定时任务
  • SpringBoot结合XXL-JOB实现定时任务

缓存

  • Spring Security结合Redis实现缓存功能

安全框架

  • Java应用程序安全框架
  • Spring Security系列文章
  • Spring Security结合JWT实现认证与授权

开发规范

  • 后端必知:遵循Google Java规范并引入checkstyle检查

前言

上篇文章我们介绍了 Quartz 的使用,当时实现了两个简单的需求,不过最后我们总结的时候也提到 Quartz 有不少缺点,代码侵入太严重,所以本篇将介绍 xxl-job 这个定时任务框架。

Quartz的不足

Quartz 的不足:Quartz 作为开源任务调度中的佼佼者,是任务调度的首选。但是在集群环境中,Quartz采用API的方式对任务进行管理,这样存在以下问题:

  • 通过调用API的方式操作任务,不人性化。
  • 需要持久化业务的 QuartzJobBean 到底层数据表中,系统侵入性相当严重。
  • 调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务。

Xxl-job介绍

官方说明:XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

通俗来讲:XXL-JOB 是一个任务调度框架,通过引入 XXL-JOB 相关的依赖,按照相关格式撰写代码后,可在其可视化界面进行任务的启动,执行,中止以及包含了日志记录与查询和任务状态监控。

更多详细介绍推荐阅读官方文档。

项目实践

Spring Boot集成XXL-JOB

Spring Boot 集成 XXL-JOB 主要分为以下两步:

  1. 配置运行调度中心(xxl-job-admin)
  2. 配置运行执行器项目

xxl-job-admin 可以从源码仓库中下载代码,代码地址有两个:

  1. GitHub:github.com/xuxueli/xxl…
  2. Gitee:gitee.com/xuxueli0323…

SpringBoot结合XXL-JOB实现定时任务,image_d5911b2b.png,第1张

下载完之后,在 doc/db 目录下有数据库脚本 tables_xxl_job.sql,执行下脚本初始化调度数据库 xxl_job,如下图所示:

SpringBoot结合XXL-JOB实现定时任务,image_5db1afcc.png,第2张

配置调度中心

将下载的源码解压,用 IDEA 打开,我们需要修改一下 xxl-job-admin 中的一些配置。(我这里下载的是最新版 2.3.1)

1、修改 application.properties,主要是配置一下 datasource 以及 email,其他不需要改变。

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=1739468244@qq.com
spring.mail.from=1739468244@qq.com
# 此处不是邮箱登录密码,而是开启SMTP服务后的授权码
spring.mail.password=xxxxx

2、修改 logback.xml,配置日志输出路径,我是在解压的 xxl-job-2.3.1 项目包中新建了一个 logs 文件夹。


然后启动项目,正常启动后,访问地址为:http://localhost:8080/xxl-job-admin,默认的账户为 admin,密码为 123456,访问后台管理系统后台。

这样就表示调度中心已经搞定了,下一步就是创建执行器项目。

创建执行器项目

本项目与 Quartz 项目用的业务表和业务逻辑都一样,所以引入的依赖会比较多。

环境配置

1、引入依赖:


  org.springframework.boot
  spring-boot-starter-parent
  2.6.3
  


  1.8
  1.2.73
  5.5.1
  8.0.19
  1.4.2.Final
  1.18.20
  1.1.18
  1.6.9


  
    org.springframework.boot
    spring-boot-starter-web
  
  
    org.springframework.boot
    spring-boot-starter-aop
  
  
    com.xuxueli
    xxl-job-core
    2.3.1
  
  
    com.baomidou
    mybatis-plus-boot-starter
    3.5.1
  
  
    com.baomidou
    mybatis-plus
    3.5.1
  
  
    mysql