xxlJob2.0版本研究

1 说明

描述本组件的设计意图,使用场景等。

对应的需求文档链接(如果有),对应的概要设计文档链接(如果有),

设计意图:XXL-JOB是一个轻量级分布式任务调度平台,主要用于项目中的定时任务设置,例如运力服务中定时同步车辆信息、同步司机信息。

项目中具体的使用场景:参考文档 20.xxl-job

2 组件设计

2.1 架构设计图
xxl-job2.0的架构图,包含的组件如图所示:

xxlJob2.0版本研究_第1张图片

XXL-JOBv2.0.0 架构图

2.0版本较之前版本差异如下:

1、调度中心迁移到 springboot ;

2、底层通讯组件迁移至 xxl-rpc ;

3、容器化:提供官方 docker 镜像,并实时更新推送 dockerhub ( docker pull xuxueli/xxl-job-admin ),进一步实现产品开箱即用;

4、新增无框架执行器 Sample 示例项目 “xxl-job-executor-sample-frameless”。不依赖第三方框架,只需 main 方法即可启动运行执行器;

5、命令行任务:原生提供通用命令行任务 Handler ( Bean 任务,“CommandJobHandler”);业务方只需要提供命令行即可;

6、任务状态优化,仅运行状态"NORMAL"任务关联至 quartz,降低 quartz 底层数据存储与调度压力;

7、任务状态规范:新增任务默认停止状态,任务更新时保持任务状态不变;

8、IP 获取逻辑优化,优先遍历网卡来获取可用 IP ;

9、任务新增的 API 服务接口返回任务 ID,方便调用方实用;

10、组件化优化,移除对 spring 的依赖:非 spring 应用选用 “XxlJobExecutor” 、spring 应用选用 “XxlJobSpringExecutor” 作为执行器组件;

11、任务 RollingLog 展示逻辑优化,修复超时任务无法查看的问题;

12、多项 UI 组件升级到最新版本,如:CodeMirror、Echarts、Jquery 等;

13、项目依赖升级 groovy 至较新稳定版本; pom 清理;

14、子任务失败重试重试逻辑优化,子任务失败时将会按照其预设的失败重试次数主动进行重试

2.2 实现方式
1、采用了代理的设计模式。

2、根据实现IJobHandler接口的类,进行扫描,并执行其中的方法。

2.3 使用问题
在项目中具体如何使用xxl_job,请参考文档:18、xxl-job定时任务配置说明

2.4 版本升级问题

2.4.1 直接升级

修改build.gradle里版本,然后运行:

xxlJob2.0版本研究_第2张图片

会报错:

类型转换错误
xxlJob2.0版本研究_第3张图片

还有一些其他错误:

xxlJob2.0版本研究_第4张图片

应该是框架自身组件升级带来的不兼容的问题。

看来直接修改升级走不通。

2.4.2 实验新的升级方法

a、从源码着手。

下载源码:https://github.com/xuxueli/xxl-job/releases

xxlJob2.0版本研究_第5张图片

b、源码目录解读

xxlJob2.0版本研究_第6张图片

c、将项目源码导入到IDEA进行运行

xxlJob2.0版本研究_第7张图片

其前端页面采用的是传统js、css和freemarker页面模板:

xxlJob2.0版本研究_第8张图片

d、项目运行前准备工作

 1、本地数据库新建xxl-job数据库,并且执行doc文档下的tables_xxl_job.sql脚本文件

xxlJob2.0版本研究_第9张图片
xxlJob2.0版本研究_第10张图片

执行后生成的表:

xxlJob2.0版本研究_第11张图片

如果没有相应的数据库和表,项目无法启动。

  2、修改项目的application.properties文件,主要是数据库对应的名称、用户名和密码,由于数据库版本问题,可以增加useSSL=false避免SSL检查

xxlJob2.0版本研究_第12张图片

c、启动项目

xxlJob2.0版本研究_第13张图片

启动成功界面,典型的springboot项目启动模式:

xxlJob2.0版本研究_第14张图片

d、进入后台主界面

根据application.properties文件,可知项目的端口号是8080,项目路径是/xxl-job-admin,又可以根据IndexController,得知主页的路径,所以在浏览器输入localhost:8080/xxl-job-admin/便进入了主页

xxlJob2.0版本研究_第15张图片

xxlJob2.0版本研究_第16张图片
xxlJob2.0版本研究_第17张图片
e、登陆到系统

根据application.properties文件,可知默认登录名和密码分别是admin和123456,点击登录进入系统:

xxlJob2.0版本研究_第18张图片

主页面和之前版本主页面差距并不大

xxlJob2.0版本研究_第19张图片

f、新增执行器

点击执行器管理,新增一个执行器:

xxlJob2.0版本研究_第20张图片

可以参照之前的操作文档(18、xxl-job定时任务配置说明),新建一个job测试执行器:

xxlJob2.0版本研究_第21张图片
xxlJob2.0版本研究_第22张图片

g、新建任务

点击任务管理,选择刚刚新建的执行器,在此执行器下新建任务

xxlJob2.0版本研究_第23张图片

任务配置:

xxlJob2.0版本研究_第24张图片

h、定时任务项目里配置的修改

修改build.gradle里xxl-job-core版本为2.0.0

xxlJob2.0版本研究_第25张图片
在这里插入图片描述

在application.properties文件里,修改xxl.job.admin.addresses为当前xxl-job后台管理系统路径地址
xxlJob2.0版本研究_第26张图片

i、启动当前项目

现在项目启动没有报错啦!

xxlJob2.0版本研究_第27张图片

j、执行一次定时任务

定时任务的位置:
xxlJob2.0版本研究_第28张图片

服务注册成功:

在这里插入图片描述

在管理页面点击一次执行:
xxlJob2.0版本研究_第29张图片

查看日志,发现失败:

xxlJob2.0版本研究_第30张图片

h、解决方法:

断点调试:

执行器组信息:

xxlJob2.0版本研究_第31张图片

任务信息:

在这里插入图片描述

触发器参数:

xxlJob2.0版本研究_第32张图片

连接正常:
xxlJob2.0版本研究_第33张图片

真正的方法执行器:

xxlJob2.0版本研究_第34张图片

报错的地方:
xxlJob2.0版本研究_第35张图片
说明是rpc调用出现了问题,应该是本地服务的问题:

xxlJob2.0版本研究_第36张图片

对照项目例子和报错信息来看,项目缺少Jetty相关的依赖,这也是XXL-JOB改动比较大的地方:

xxlJob2.0版本研究_第37张图片

添加项目依赖:

xxlJob2.0版本研究_第38张图片

重启项目,执行任务运行:

发现报错信息变了:

xxlJob2.0版本研究_第39张图片

找不到需要执行的服务了
xxlJob2.0版本研究_第40张图片

要回到项目里去查看,应该是具体的任务没有注册到xxl-job管理中。

通过运行例子发现,项目中要添加初始化配置才能把配置文件里的基本配置信息注入到注册管理中心里。

xxlJob2.0版本研究_第41张图片

那么在本项目里增加xxlConfig配置,配置需要初始化的配置项:

xxlJob2.0版本研究_第42张图片

重启项目,再次执行一次项目,终于运行成功。

在这里插入图片描述

任务执行成功!

xxlJob2.0版本研究_第43张图片

至此,xxl-job 2.0.0版本的配置和运行整个流程到此结束,跟之前版本相比改动幅度较大,需要谨慎升级!

2.4.3集成到envconfig

原来envconfig中xxl-job配置类中主要内容为:

xxlJob2.0版本研究_第44张图片

由于新的xxl-job迁移到了envconfig中,可以在envconfig中将此处变更为:

xxlJob2.0版本研究_第45张图片

实际上执行器XxlJobSpringExecutor是继承于原来的XxlJobExecutor,对原执行器的扩展:

xxlJob2.0版本研究_第46张图片

如果这样改的话,可以不用在每个项目里建立config配置类。

具体实验方法如下:

a、修改evnconfig工程:

pom文件修改xxl-job-core为2.0.0版本

xxlJob2.0版本研究_第47张图片

envconfig临时改为1.3.26版本

xxlJob2.0版本研究_第48张图片

增加XxlJobAutoConfiguration类,并添加@ConditionalOnClass和@ConditionalOnMissingBean注解,这样会在项目启动时自动扫描注入配置类

xxlJob2.0版本研究_第49张图片

xxlJob2.0版本研究_第50张图片

同时在META-INF目录下的spring.factories里添加一个新的自动配置类的绝对路径(根据springboot原理分析),这个文件的主要作用是提供启动配置类的路径,方便进行扫描,从@SpringBootApplication->

@EnableAutoConfiguration->AutoConfigurationImportSelector.class->selectImports方法里的getCandidateConfigurations方法->SpringFactoriesLoader类的loadFactoryNames
->loadSpringFactories方法
实际上就是加载这个文件里的自动配置:

xxlJob2.0版本研究_第51张图片
xxlJob2.0版本研究_第52张图片

最后打包项目生成新的jar包

xxlJob2.0版本研究_第53张图片

打包成功:

在这里插入图片描述

b、修改项目:

把生成的包放到gradle管理的jar包下

xxlJob2.0版本研究_第54张图片

修改envconfig包:

xxlJob2.0版本研究_第55张图片

启动项目:

xxl配置项配置成功:

xxlJob2.0版本研究_第56张图片

项目启动成功:
xxlJob2.0版本研究_第57张图片

执行任务:

执行成功:

xxlJob2.0版本研究_第58张图片
xxlJob2.0版本研究_第59张图片

2.4.4 新旧版本数据库对比

根据比对1.9.2和2.0.0版本,发现表结构并没有变化。

xxlJob2.0版本研究_第60张图片

2.4.5其他考虑

升级的的话,后端修改幅度并不大,数据库也不用修改,前端直接用新的代码部署即可,详情过程请参考文档。

你可能感兴趣的:(xxlJob2.0版本研究)