# 一、 XXL-JOB 介绍
XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
官网:https://www.xuxueli.com/xxl-job/
文档:https://www.xuxueli.com/xxl-job/#《分布式任务调度平台 XXL-JOB》
XXL-JOB 主要有调度中心、执行器、任务:
调度中心:
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码;
主要职责为执行器管理、任务管理、监控运维、日志管理等
任务执行器:
负责接收调度请求并执行任务逻辑;
只要职责是注册服务、任务执行服务(接收到任务后会放入线程池中的任务队列)、执行结果上报、日志服务等
** 任务:** 负责执行具体的业务处理。
调度中心与执行器之间的工作流程如下:
执行流程:
1. 任务执行器根据配置的调度中心的地址,自动注册到调度中心
2. 达到任务触发条件,调度中心下发任务
3. 执行器基于线程池执行任务,并把执行结果放入内存队列中、把执行日志写入日志文件中
4. 执行器消费内存队列中的执行结果,主动上报给调度中心
5. 当用户在调度中心查看任务日志,调度中心请求任务执行器,任务执行器读取任务日志文件并返回日志详情
# 二、使用配置
执行命令拉取 xxl-job-2.3.1
docker pull xuxueli/xxl-job-admin:2.3.1 |
拉取成功后,创建挂载配置路径:
mkdir -p -m 777 /root/tmp/xxl-job/data/applogs |
创建完成后在 /root/tem/xxl-job/ 目录中 创建 配置文件 application.properties
配置内容如下:
里面就更改下自己的 ip 地址和数据库账户和密码即可。
### web | |
server.port=8080 | |
server.servlet.context-path=/xxl-job-admin | |
### actuator | |
management.server.servlet.context-path=/actuator | |
management.health.mail.enabled=false | |
### resources | |
spring.mvc.servlet.load-on-startup=0 | |
spring.mvc.static-path-pattern=/static/** | |
spring.resources.static-locations=classpath:/static/ | |
### freemarker | |
spring.freemarker.templateLoaderPath=classpath:/templates/ | |
spring.freemarker.suffix=.ftl | |
spring.freemarker.charset=UTF-8 | |
spring.freemarker.request-context-attribute=request | |
spring.freemarker.settings.number_format=0.########## | |
### mybatis | |
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml | |
#mybatis.type-aliases-package=com.xxl.job.admin.core.model | |
### xxl-job, datasource | |
spring.datasource.url=jdbc:mysql://192.168.249.128:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai | |
spring.datasource.username=root | |
spring.datasource.password=dkx. | |
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver | |
### datasource-pool | |
spring.datasource.type=com.zaxxer.hikari.HikariDataSource | |
spring.datasource.hikari.minimum-idle=10 | |
spring.datasource.hikari.maximum-pool-size=30 | |
spring.datasource.hikari.auto-commit=true | |
spring.datasource.hikari.idle-timeout=30000 | |
spring.datasource.hikari.pool-name=HikariCP | |
spring.datasource.hikari.max-lifetime=900000 | |
spring.datasource.hikari.connection-timeout=10000 | |
spring.datasource.hikari.connection-test-query=SELECT 1 | |
spring.datasource.hikari.validation-timeout=1000 | |
### xxl-job, email | |
spring.mail.host=smtp.qq.com | |
spring.mail.port=25 | |
spring.mail.username=xxx@qq.com | |
spring.mail.from=xxx@qq.com | |
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, access token | |
xxl.job.accessToken=default_token | |
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") | |
xxl.job.i18n=zh_CN | |
## 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 |
到 github 中 拉取一下项目里面有一个 sql 文件:https://github.com/xuxueli/xxl-job
或者到码云:https://gitee.com/xuxueli0323/xxl-job 拉取项目。主要是 sql 文件啊
我们需要找到这个 sql 文件然后创建一个数据库并导入 sql 文件,再进行下一步!
配置完成后启动 xxl-job-2.3.1 并创建容器:
docker run -p 18080:8080 -d --name=xxl --restart=always -v /root/tmp/xxl-job/application.properties:/application.properties -e PARAMS='--spring.config.location=/application.properties' xuxueli/xxl-job-admin:2.3.1 |
启动成功后访问 uri:http://192.168.249.128:18080/xxl-job-admin/jobgroup
账号:admin ,密码:123456
访问后页面如下:
创建一个执行器
点击新增,填写执行器信息,appname 是前边在 nacos 中配置 xxl 信息时指定的执行器的应用名。
添加成功:
在需要用到的业务模块中导入依赖:
PS:这里建议使用 2.3.0 版本因为一下版本使用起来有差别 方法必须有一个参数是 String 类型和返回值类型 ReturnT
<dependency> | |
<groupId>com.xuxueli</groupId> | |
<artifactId>xxl-job-core</artifactId> | |
</dependency> |
配置 application.yml 如下,也可以配置到 nacos 中:
xxl: | |
job: | |
admin: | |
addresses: http://192.168.101.65:8088/xxl-job-admin | |
executor: | |
appname: media-process-service | |
address: | |
ip: | |
port: 9999 | |
logpath: /data/applogs/xxl-job/jobhandler | |
logretentiondays: 30 | |
accessToken: default_token |
<font color='red'> 注意 </font > 配置中的 appname 这是执行器的应用名,port 是执行器启动的端口,如果本地启动多个执行器注意端口不能重复。
在从 github 或者 gitee 中拉取的 xxl-job-2.3.1 项目中找到
E:\ 学成在线项目 — 资料 \day06 断点续传 xxl-job\ 资料 \xxl-job-2.3.1\xxl-job-executor-samples\xxl-job-executor-sample-springboot\src\main\java\com\xxl\job\executor\core\config\XxlJobConfig.java
配置文件
将该配置文件拷贝到 自己项目的该模块的 config 目录中
启动服务
可以看到服务就自动的注册到了执行器中了
点击 查看 (1)
执行器执行任务
从 xxl-job-2.3.1 项目中先来拿到一个例子就是如下代码:
E:\ 学成在线项目 — 资料 \day06 断点续传 xxl-job\ 资料 \xxl-job-2.3.1\xxl-job-executor-samples\xxl-job-executor-sample-springboot\src\main\java\com\xxl\job\executor\service\jobhandler\SampleXxlJob.java
然后将这个代码,拷贝到自己项目的模块的 service 业务中。
/** | |
* XxlJob 开发示例(Bean 模式) | |
* | |
* 开发步骤: | |
* 1、任务开发:在 Spring Bean 实例中,开发 Job 方法; | |
* 2、注解配置:为 Job 方法添加注解 "@XxlJob (value=" 自定义 jobhandler 名称 ", init ="JobHandler 初始化方法 ", destroy ="JobHandler 销毁方法 ")",注解 value 值对应的是调度中心新建任务的 JobHandler 属性的值。 | |
* 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; | |
* 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; | |
* | |
* @author xuxueli 2019-12-11 21:52:51 | |
*/ | |
@Component | |
public class SampleXxlJob { | |
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class); | |
/** | |
* 1、简单任务示例(Bean 模式) | |
*/ | |
@XxlJob("demoJobHandler") | |
public void demoJobHandler() throws Exception { | |
System.out.println("视频处理..."); | |
// default success | |
} | |
} |
然后就可以在这里面来编写自己的业务逻辑代码了。
那么这个任务执行器中的任务怎么执行呢,我们需要到控制台中的执行任务中进行配置:
其中的 bean 指的就是 执行任务 业务逻辑代码中注入的 bean 名称
也可以选择其它的比如 Java 那么右边的框就不能输入了,下面就是输入要执行的 Java 代码。
搞完上面的后就重启后端服务
启动服务后那 任务怎么执行呢,我们需要 ,在控制台 中 任务管理的 任务
启动后就可以看到每隔 5 秒后端控制台就会打印出一句话
c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job regist JobThread success, jobId:2, handler:com.xxl.job.core.handler.impl.MethodJobHandler@1dcca426[class com.xuecheng.media.service.jobhandler.SampleXxlJob#demoJobHandler]
视频处理...
视频处理...
视频处理...
视频处理...
视频处理...
视频处理...
在运行报表中可以看到调度情况如下