XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
先来看看 XxlJob 自身的系统结构:
这里以单机部署为示例
(1):clone 代码:git clone https://github.com/xuxueli/xxl-job
(2):初始化数据库
/xxl-job/doc/db/tables_xxl_job.sql
数据库相关说明:
(3):调度中心配置
/xxl-job/xxl-job-admin/src/main/resources/application.properties
主要是配置了数据库的连接:
### web
server.port=8080
server.servlet.context-path=/xxl-job-admin
### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
spring.datasource.url=jdbc:mysql://192.168.3.2:3306/xxl_job_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=beta
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
(4):执行器项目配置
要与调度中心部署的地址一致
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job executor appname
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-demo
此处的执行器名称会自动注册到调度中心平台上面去,如下所示:
(5):启动服务
先使用IDEA来启动调度中心项目,如下所示:
xxl-job-admin 的8080 端口被启动了。
再使用IDEA来启动执行器项目,如下所示:
xxl-job-Executor 的8081端口被启动了。
运行原理图所示:
原理解释:
1. 任务执行器根据配置的调度中心的地址,启动注册线程向调度中心的执行器管理发起自动注册。执行器管理中保存着注册执行器,后续会根据这个注册信息给执行器下发任务。
2. 如果此时有需要执行的任务,任务管理模块会根据执行器管理中注册的执行器信息,向任务执行器下发任务。任务执行器中的任务执行服务接受到任务以后会将任务发送到待执行任务的队列中,队列中的任务会由执行线程 JobHandler 依次获取并且执行。
这里会维护一个任务执行的线程池,池中就是一个个 JobHandler 线程,它们是执行任务的主力军。
3. JobHandler 执行器基于线程池执行任务,并把执行结果放入执行结果队列中,同时会把执行日志写入任务日志文件中,以供日志查询。
然后通知毁掉线程,告知任务执行完毕,回调线程会通知调度中心的监控运维模块,任务执行完毕。
4. 用户可以在调度中心查看任务日志,其过程是通过发送日志查询请求给任务执行器中的日志服务,然后查询任务日志文件实现的。
示例:
内容非常的简单,就是获取请求的参数,然后再日志输出。
@XxlJob("testJobHander")
public void testJobHander() throws Exception{
String param = XxlJobHelper.getJobParam();
XxlJobHelper.log("the param is:"+param);
}
2. 在调度中心 > 任务管理【页面】>【新增】任务相关配置
如下所示:
3. 是点击【操作】下面的执行一次【输入参数为:this is test】,可以查看调度日志:
4. 可以查看【运行报表】数据:
end