定时任务__@Xxl-JOB的使用
概述xxl-job框架
首先我们要知道什么是XXL-JOB?
官方简介:XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用
XXL-JOB的有点特性:
1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
4、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA;
5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
7、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
8、故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
9、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
10、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
11、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
12、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
13、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;
14、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
15、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发
…
是目前主流的分布式任务调度平台,许多公司的产品业务都有XXL-JOB的接入
开源社区使用
首先从GitHub上面将项目clone下来,如果网络问题导致速度慢也可以从Gitee上面拉取
https://www.xuxueli.com/xxl-job/#/
xxl-job架构图
(压缩之后可以在文件中发现他的架构图)
分布式任务项目的简单搭建
在GitHub上获取源代码
解压、导入开发工具
修改pom.xml文件:
主要修改为:配置新的JDK版本:JDK8(默认为JDK7)
1.修改Admin中的pmx文件
2.修改xxl-job-master的pom配置文件
两个pom文件都要添加
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<configuration>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
修改数据源
对应数据库文件,可以导入到自己的数据库中
注意:如果库中有同名的表了,需要到文件中注释掉创建表的步骤
在数据库中表的介绍
导入maven
结构相关介绍:
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor…:执行器
文件中有sql文件,运行生成库表
- xxl_job_lock:任务调度锁表;
- xxl_job_group:执行器信息表,维护任务执行器信息;
- xxl_job_info:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
- xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
- xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
- xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
- xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
- xxl_job_user:系统用户表;
启动服务
需要启动两个服务,第一个是图形化界面的启动,一个是任务SpringBoot定时任务类基本同等于我们项目中的任务类
启动xxl-job-admin项目[图形化界面]
路径: D:\demo\xxl-job-master\xxl-job-admin\src\main\java\com\xxl\job\admin\XxlJobAdminApplication.java
启动xxl-job-executor-sample-springboot项目[定时任务类]
路径: D:\demo\xxl-job-master\xxl-job-executor-samples\xxl-job-executor-sample-springboot\src\main\java\com\xxl\job\executor\XxlJobExecutorApplication.java
注意:其实我们项目中有两个模板,启动那个都可以,只是我用了SpringBoot,所以就只启动了这个
启动结果
访问登录页面
输入地址就可以访问到对应的图形化界面了
网址:http://localhost:8080/xxl-job-admin/
默认的管理员
账号:admin
密码:123456
登录成功的页面
自建分布式任务:Hello world
执行器主要分为两种方式:
- 自动注册
- 手动注册
手动图解[自动不弄,可以看视频学习]
①创建执行器
②创建任务
③在任务后面--》操作按钮--》开启任务
④查看日志
执行器注意事项
1、确认pom文件中引入了 “xxl-job-core” 的maven依赖;
2、配置文件:
==>: xxl.job.admin.addresses配置(调度中心地址:例如http://127.0.0.1:8080/xxl-job-admin)
==>: xxl.job.executor.appname配置(执行器AppName,可视化界面添加执行器时需要)
==>: xxl.job.executor.port配置(执行器端口号,多个执行器时注意端口号不一致)
3、不同版本的机器地址输入的格式不一样
例如:
2.2版格式àhttp://IP地址:端口
1.0版格式àIP地址:端口
遇到的问题
问题1:执行器地址为空
原因--》执行器中 没有地址
解决方案--》输入地址:http://IP地址:端口
IP地址
端口
问题2:异常信息unknown code for readObject at 0x3c
1.错误提示无法找到执行器。
原因:需要启动两个项目 xxl-job-admin 、xxl-job-executor-samples (这里我用的是xxl-job-executor-sample-springboot)
2.调度成功了,但是执行不会停止,只能手动停止,执行结果是失败的。
或者启动时遇到以下的异常信息:
unknown code for readObject at 0x3c
原因:这种提示的错误一般出在admin配置address没有配对。
检查xxl-job-executor-springboot-example里面配置文件的xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin
与启动步骤2是否一致
完成!