定时任务__@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文件,运行生成库表

  1. 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. 自动注册
  2. 手动注册

手动图解[自动不弄,可以看视频学习]

①创建执行器

 

 

 

②创建任务

 

 

 

③在任务后面--》操作按钮--》开启任务

 

 

 

④查看日志

 

 

 

 

执行器注意事项

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是否一致

 

 

 

 

 

完成!

posted @ 2021-01-29 13:57  骚哥  阅读(14145)  评论(0编辑  收藏  举报