热门标签 | 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其他考虑

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


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 为何我选择了华为云GaussDB数据库
    本文分享了作者选择华为云GaussDB数据库的理由,详细介绍了GaussDB(for MySQL)的技术特性和优势,以及它在金融和互联网行业的应用场景。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • 理解UML的重要性及其应用
    探讨为什么大多数开发人员难以成为架构师,介绍从现实世界到业务模型的抽象过程,并详细解释UML在软件设计中的关键作用。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 从码农到创业者:我的职业转型之路
    在观察了众多同行的职业发展后,我决定分享自己的故事。本文探讨了为什么大多数程序员难以成为架构师,并阐述了我从一家外企离职后投身创业的心路历程。 ... [详细]
  • ThinkPHP 数据库配置详解
    本文详细介绍了如何在 ThinkPHP 框架中正确配置数据库连接参数,包括数据库类型、服务器地址、数据库名称等关键配置项。 ... [详细]
  • 创邻科技成功举办Graph+X生态合作伙伴大会,30余家行业领军企业共聚杭州
    9月22日,创邻科技在杭州举办“Graph+X”生态合作伙伴大会,汇聚了超过30家行业头部企业的50多位企业家和技术领袖,共同探讨图技术的前沿应用与发展前景。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
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社区 版权所有