热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

xxlJob2.0版本研究

1说明描述本组件的设计意图,使用场景等。对应的需求文档链接(如果有),对应的概要设计文档链接(如果有&#x

1 说明

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

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

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

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

2 组件设计

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

在这里插入图片描述

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里版本,然后运行:

在这里插入图片描述

会报错:

类型转换错误
在这里插入图片描述

还有一些其他错误:

在这里插入图片描述

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

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

2.4.2 实验新的升级方法

a、从源码着手。

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

在这里插入图片描述

b、源码目录解读

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

d、项目运行前准备工作

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

在这里插入图片描述
在这里插入图片描述

执行后生成的表:

在这里插入图片描述

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

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

在这里插入图片描述

c、启动项目

在这里插入图片描述

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

在这里插入图片描述

d、进入后台主界面

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
e、登陆到系统

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

在这里插入图片描述

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

在这里插入图片描述

f、新增执行器

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

g、新建任务

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

在这里插入图片描述

任务配置:

在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述

在application.properties文件里,修改xxl.job.admin.addresses为当前xxl-job后台管理系统路径地址
在这里插入图片描述

i、启动当前项目

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

在这里插入图片描述

j、执行一次定时任务

定时任务的位置:
在这里插入图片描述

服务注册成功:

在这里插入图片描述

在管理页面点击一次执行:
在这里插入图片描述

查看日志,发现失败:

在这里插入图片描述

h、解决方法:

断点调试:

执行器组信息:

在这里插入图片描述

任务信息:

在这里插入图片描述

触发器参数:

在这里插入图片描述

连接正常:
在这里插入图片描述

真正的方法执行器:

在这里插入图片描述

报错的地方:
在这里插入图片描述
说明是rpc调用出现了问题,应该是本地服务的问题:

在这里插入图片描述

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

在这里插入图片描述

添加项目依赖:

在这里插入图片描述

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

发现报错信息变了:

在这里插入图片描述

找不到需要执行的服务了
在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

任务执行成功!

在这里插入图片描述

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

2.4.3集成到envconfig

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

具体实验方法如下:

a、修改evnconfig工程:

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

在这里插入图片描述

envconfig临时改为1.3.26版本

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

打包成功:

在这里插入图片描述

b、修改项目:

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

在这里插入图片描述

修改envconfig包:

在这里插入图片描述

启动项目:

xxl配置项配置成功:

在这里插入图片描述

项目启动成功:
在这里插入图片描述

执行任务:

执行成功:

在这里插入图片描述
在这里插入图片描述

2.4.4 新旧版本数据库对比

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

在这里插入图片描述

2.4.5其他考虑

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


推荐阅读
author-avatar
中青33期_840
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有