前言

本地搭了个xxl-job环境,浅浅记录下,方便后面深入学习和实操。


搭建步骤

官网地址传送门>
代码仓库>

环境准备

Maven3+
Jdk1.8+
Mysql5.7+
Idea开发环境

然后把代码clone到本地,checkout到对应的版本分支,这里使用的是2.3.0版本。

再通过开发工具Idea进行导入 xxl-job 项目,主要方便启动和配置。目录包括:
doc:一些说明,主要有个初始化的sql
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor-sample:执行器示例项目,编写/执行任务的服务


执行初始化脚本

将 xxl-job/doc/db/tables_xxl_job.sql 到本地执行,并配置数据库到 xxl-job/xxl-job-admin/src/main/resource/application.properties中,同时可以在该配置文件中修改调度中心web页面的访问端口号。其它按需配置即可。


启动调度中心项目

启动xxl-job-admin模块项目

如果报错
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[file] - Failed to create parent directories for [/data/applogs/xxl-job/xxl-job-admin.log]
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[file] - openFile(/data/applogs/xxl-job/xxl-job-admin.log,true) call failed. java.io.FileNotFoundException: /data/applogs/xxl-job/xxl-job-admin.log (No such file or directory)
表示缺失相关目录与文件,创建对用目录即可。

启动后访问:http://127.0.0.1:8181/xxl-job-admin/
默认登陆账号密码:admin/123456


启动执行器项目

我们可以使用samples下的springboot示例项目:xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot

相关配置说明如下:

### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30

里面有三个配置项说明下
1、xxl.job.admin.addresses:填写调度中心的地址,这里修改成前面启动的调度中心地址:http://127.0.0.1:8181/xxl-job-admin
2、xxl.job.executor.appname:当前执行器的名称,配置后可以完成自动注册,前提是要和调度中心中配置的执行器AppName相同才行。
3、xxl.job.executor.port:执行器端口号,作为调用中心调度时调用的端口号,该端口号会注册到调用中心。如果启动多个实例,注册到相同的appname执行器上,需要配置不同的端口。当然,在现在的架构中,不用使用不同的端口号,因为每个实例节点都会分配不同的ip。


然后启动执行器,到调度中心查看执行器,成功自动注入:image-1695310767200


创建任务并进行调度

在 com.xxl.job.executor.service.jobhandler.SampleXxlJob中已经有了一些demo job,将@XxlJob注解里面的名称配置到调度中心的任务管理的JobHandler配置项中,如下:
image-1695311033167

这里配置每2秒执行1次,更多配置说明可以查看官方文档。

任务启动查看日志,显示成功。


总结

xxl-job是一个分布式任务调度平台。我们现在的服务一般都是无状态的多实例部署,有一个调度中心进行调度,方便进行任务的管理与协调,同时xxl-job支持了常见的场景和功能特性,如分片、告警等等,开箱即用。

如果想在项目中使用xxl-job中,需要增加配置(参考samples项目)及pom包的引入:

 <!-- xxl-job-core -->
<dependency>
  <groupId>com.xuxueli</groupId>
  <artifactId>xxl-job-core</artifactId>
  <version>${version}</version>
</dependency>