掘金 后端 ( ) • 2024-05-03 13:22

概述

XXL-JOB is a distributed task scheduling framework. It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand. Now, it's already open source, and many companies use it in production environments, real "out-of-the-box".

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

——官方介绍

官方网站:

中文

https://www.xuxueli.com/xxl-job/

英文

https://www.xuxueli.com/xxl-job/en/

源码下载地址:

https://github.com/xuxueli/xxl-job/releases

我们可以下载源码到本地,方便学习~

window相关操作系统下zip格式的,Mac相关下tar.gz格式的,下载后解压打开基本就长下面这个样子~

其实

源码结构如下图:

案例

  1. 初始化案例数据库

在本地的MySQL中执行官方提供的调度数据库SQL(在doc文件夹下的db文件夹里)

复制到MySQL中执行即可,执行完成后MySQL中会新增一个名为“xxl_job”的数据库,具体如下图:

值得注意的是:在集群部署时,各节点需要连接同一个MySQL实例(如果MySQL采用半主从配置,则需要连接主库)

  1. 调度中心的配置与启动

配置文件位置如下图(记得将数据库密码改成你自己的)

哦对了大致介绍下这个文件中比较重要的配置吧

调度中心的JDBC链接

### 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_pwd
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

报警邮箱配置

### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
[email protected]
[email protected]
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

国际化配置

### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN

翻译下注释:默认为 "zh_CN"(就是中文简体), 可选范围为 "zh_CN"(中文简体), "zh_TC"(中文繁体)和"en"(英文)

还有调度线程池最大线程的配置

## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

调度中心日志表数据保存天数,过期的日志会被自动清理

### xxl-job, log retention days
xxl.job.logretentiondays=30

ps:限制>=7时生效,否则则会关闭自动清理功能

点击运行,启动项目,如下图则启动成功

访问地址:http://localhost:8080/xxl-job-admin

登陆账号:admin

登陆密码:123456

页面如下图所示:

  1. 执行器的配置与启动

这里以官方提供示例代码中的xxl-job-executor-sample-springboot模块为例,我们看下它的配置文件:

重要参数说明:

xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

用于配置调度中心部署地址,存在多个地址则用逗号分,为空则关闭自动注册,执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"

xxl.job.executor.appname=xxl-job-executor-sample

用于配置执行器名称,是执行器心跳注册分组依据,同样的,如果为空则关闭自动注册

xxl.job.executor.address=
xxl.job.executor.ip=
xxl.job.executor.port=9999

这三个地址信息主要用于 "执行器注册" 和 "调度中心请求并触发任务",其中address是执行器注册(最优先使用),为空时使用内嵌服务 IP:PORT 作为注册地址;ip是执行器IP(默认为空,表示自动获取IP,可手动指定);port表示执行器端口号(默认9999,小于等于0则自动获取)

### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

这里配置了日志文件的存储位置(可以改成自己设置的文件夹)

启动执行器:

显示如下信息则证明启动成功:

此时我们打开http://localhost:8080/xxl-job-admin/jobinfo 就可以看到任务调度中心新增了一个任务,如下图

  1. 创建任务

配置好必填项即可点击保存

这里我们使用了BEAN模式的配置方式,即在要执行的方法上加如下注解:

@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")

注解value值对应的是调度中心新建任务的JobHandler属性的值,示例代码的配置如下:

创建成功~

  1. 启动任务并查看日志

点击操作,选择“启动”

点击确认,启动该job

可以看到刚才启动的job的状态从“STOP”变成了“RUNNING”

然后就可以在配置的日志目录下,看到新生成的日志文件

随意打开一个,就可以看到demoJobHandler中的执行结果,具体如下图:

c