xxl-job任务调度2.0.2升级到2.3.0版本,执行器改造过程中经验总结

news2025/1/12 13:36:00

xxl-job任务调度2.0.2升级到2.3.0版本

  • 一、背景
  • 二、开始改造
    • 1、修改pom.xml
    • 2、修改Handler
    • 3、启动服务并验证
    • 4、解决异常
    • 5、再次启动服务并验证

一、背景

现在要对一批老项目中的执行器进行升级,原来老项目中的执行器,依赖的任务调度中心xxl-job版本是2.0.2-SNAPSHOT版本,现在要依赖2.3.0版本的xxl-job任务调度中心

二、开始改造

老项目的执行器,使用的是spring版本,需要tomcat来启动服务,这里拿一个纯净的spring项目来演示,具体如下:
在这里插入图片描述

1、修改pom.xml

打开pom.xml文件,原文件是这样的
在这里插入图片描述
如下:

<parent>
		<groupId>com.xuxueli</groupId>
		<artifactId>xxl-job-executor-samples</artifactId>
		<version>2.0.2-SNAPSHOT</version>
	</parent>

修改执行器依赖xxl-job-core的版本,改为2.3.0版本
在这里插入图片描述
如下:

<parent>
		<groupId>com.xuxueli</groupId>
		<artifactId>xxl-job-executor-samples</artifactId>
		<version>2.3.0</version>
	</parent>

2、修改Handler

升级到2.3.0版本之后,我们发现Handler类报错了
在这里插入图片描述
原因就是因为,新版本的xxl-job,已经弃用了@JobHandler注解,采用了@XxlJob注解,并且@XxlJob注解只能作用在方法上面哦。

改造步骤:

  • 1、去掉@JobHandler注解
  • 2、去掉 extends IJobHandler
  • 3、方法上加上@XxlJob注解
  • 4、返回值 SUCCESS 改为 ReturnT.SUCCESS

代码参考:

package com.xxl.job.executor.service.jobhandler;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;

@Component
public class DemoJobHandler {

	@XxlJob("demoJobHandler")
	public ReturnT<String> execute(String param) throws Exception {
		XxlJobLogger.log("XXL-JOB, Hello World.");

		for (int i = 0; i < 5; i++) {
			XxlJobLogger.log("beat at:" + i);
			TimeUnit.SECONDS.sleep(2);
		}
		return ReturnT.SUCCESS;
	}

}

3、启动服务并验证

版本也升级了,handler类也改造好了,貌似没什么问题了,那我们直接启动tomcat服务,来验证一下。
启动之后,我们看一下控制台日志

在这里插入图片描述

Connected to server
[2023-10-20 10:34:31,713] Artifact xxl-job-executor-sample-spring:war exploded: Artifact is being deployed, please wait...
20-Oct-2023 10:34:38.787 信息 [RMI TCP Connection(5)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
20-Oct-2023 10:34:38.885 严重 [RMI TCP Connection(5)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
20-Oct-2023 10:34:38.887 严重 [RMI TCP Connection(5)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
[2023-10-20 10:34:38,903] Artifact xxl-job-executor-sample-spring:war exploded: Error during artifact deployment. See server log for details.

如果这个看不出来,可以看一下另外的输出日志
在这里插入图片描述

org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
20-Oct-2023 10:34:38.834 严重 [RMI TCP Connection(5)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class org.springframework.web.util.Log4jConfigListener
 java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

4、解决异常

刚刚启动服务的时候,报错了,比较核心的错误日志是这一句:

java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

就是说tomcat启动的时候,没有找到spring中的Log4jConfigListener类,OK,我们先看一下spring的版本,升级到2.3.0之后,spring-webmvc的版本也跟着改变了,变成了5.3.3版本
在这里插入图片描述
经过查询,发现org.springframework.web.util.Log4jConfigListener这个类在spring5.0及以上版本已经废弃删除,如果想使用这个类,spring版本需要降低。原来如此,那我们直接将spring的版本降为升级前的版本

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.22.RELEASE</version>
		</dependency>

OK,接下来启动服务,看一下
在这里插入图片描述

我们发现虽然报错了,但至少spring容器在加载初始化一些配置了,我们分析一下错误:

Invalid property 'appName' of bean class [com.xxl.job.core.executor.impl.XxlJobSpringExecutor]: Bean property 'appName' is not writable or has an invalid setter method. Did you mean 'appname'?

应该是属性名称不一样,我们找一下源码,打开一下XxlJobSpringExecutor类

public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationContextAware, SmartInitializingSingleton, DisposableBean {
    private static final Logger logger = LoggerFactory.getLogger(XxlJobSpringExecutor.class);
    private static ApplicationContext applicationContext;

    public XxlJobSpringExecutor() {
    }

    public void afterSingletonsInstantiated() {
        this.initJobHandlerMethodRepository(applicationContext);
        GlueFactory.refreshInstance(1);

        try {
            super.start();
        } catch (Exception var2) {
            throw new RuntimeException(var2);
        }
    }
    .....

发现没有,继续找他的父类XxlJobExecutor,终于找到了,我们看到appname这个字段是这样命名的
在这里插入图片描述
所以,我们回到项目中,看一下项目中的配置文件
在这里插入图片描述
原来这个地方写成了appName,所以只要把他改成appname就可以了
在这里插入图片描述

5、再次启动服务并验证

在这里插入图片描述
我们发现终于启动成功了,再看一下,执行器是否注册到任务调度中心了
在这里插入图片描述
我们随便建一个任务执行一下看看
在这里插入图片描述
执行成功
在这里插入图片描述

在这里插入图片描述
至此,执行器的版本升级结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金和OA SQL注入漏洞

一、漏洞描述 金和OA协同办公管理系统C6软件&#xff0c;为北京金和网络股份有限公司 开发系统&#xff0c;贴合企事业单位的实际需求&#xff0c;实行通用化、标准化、智能化、人性化的产品设计&#xff0c;充分体现企事业单位规范管理、提高办公效率的核心思想&#xff0c;为…

Go包介绍与初始化:搞清Go程序的执行次序

Go包介绍与初始化&#xff1a;搞清Go程序的执行次序 文章目录 Go包介绍与初始化&#xff1a;搞清Go程序的执行次序一、main.main 函数&#xff1a;Go 应用的入口函数1.1 main.main 函数1.2 main.main 函数特点 二、包介绍2.1 包介绍与声明2.2 非 main包的 main 函数2.3 包的命名…

剑指Offer || 050.路径总和|||

题目 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从父节点到子节…

DETR原理与代码超详细解读

文章目录 前言一、DETR论文原理1、DETR整体介绍2、DETR论文贡献3、DETR模型框架4、DETR基于二分图匹配的LOSS 二、DETR环境安装1、安装基础环境2、pycocotools安装3、其它环境安装4、环境验证5、训练与推理效果显示 三、数据准备1、coco 数据格式2、修改数据 四、DETR加载数据代…

Git的安装

前置 知道自己电脑上跑的是什么系统 查看电脑位数 省事的一种办法 Windows 在cmd中输入如下命令 wmic os get osarchitecture看命令结果即可 省事的一种办法 Linux 直接在终端中输入如下命令 uname -m若结果是x86_64就是64位的&#xff0c;反之32位 图形化的办法 Wind…

Peter算法小课堂—正整数拆分

大家可能会想&#xff1a;正整数拆分谁不会啊&#xff0c;2年级就会了&#xff0c;为啥要学啊 例题 正整数拆分有好几种&#xff0c;这里我们列举两种讲。 关系 我们看着第一幅图&#xff0c;头向左转90&#xff0c;记住你看到的图&#xff0c;再来看第二幅图&#xff0c;你…

lnmp架构部署Discuz论坛并配置重定向转发

lnmp架构部署Discuz论坛并配置重定向转发 文章目录 lnmp架构部署Discuz论坛并配置重定向转发环境说明部署Discuz论坛系统下载Discuz论坛系统代码包&#xff0c;官网地址如下&#xff1a;部署Discuz论坛系统步骤&#xff1a;解压安装Discuz源码包配置虚拟主机进入Discuz安装界面…

pytest利用request fixture实现个性化测试需求详解

这篇文章主要为大家详细介绍了pytest如何利用request fixture实现个性化测试需求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下− 前言 在深入理解 pytest-repeat 插件的工作原理这篇文章中&#xff0c;我们看到pytest_repeat源码中有这样一段 import pyt…

YOLOv5算法改进(14)— 如何去更换主干网络(3)(包括代码+添加步骤+网络结构图)

前言:Hello大家好,我是小哥谈。为了给后面YOLOv5算法的进阶改进奠定基础,本篇文章就继续通过案例的方式给大家讲解如何在YOLOv5算法中更换主干网络,本篇文章的特色就是比较浅显易懂,附加了很多的网络结构图,通过结构图的形式向大家娓娓道来,希望大家学习之后能够有所收获…

msvcr120.dll缺失怎么修复,快速修复msvcr120.dll丢失的三个有效方法

随着计算机技术的不断发展&#xff0c;我们在使用软件或游戏时经常会遇到各种错误提示&#xff0c;其中找不到msvcr120.dll就是一种常见的错误。那么&#xff0c;msvcr120.dll是什么&#xff1f;它的作用是什么&#xff1f;如何修复这一错误呢&#xff1f;本文将为您详细介绍几…

Python学习基础笔记七十九——Socket编程2

应用消息格式&#xff1a; 为什么要定义消息格式&#xff1f; 我们发送的消息就是要传递的内容&#xff0c;比如字符串。 我们在企业中开发的程序通讯&#xff0c;消息往往是有格式定义的。消息格式的定义可以归入OSI网络模型的表示层。 比如&#xff1a;定义的消息包括消息…

电子技术基础(三)__第7章 时序逻辑电路_第7篇之解题方法与步骤

我们必须牢记这样一句&#xff1a; 先列出输入逻辑式&#xff0c;即驱动方程&#xff0c; 然后将驱动方程代入触发器的特征方程&#xff0c; 得到状态方程(也称 次态方程)&#xff0c; 最后写出输出方程。 二 看例题 2022.4 真题 第38题 分析: 此题乍一看&#xff0c;可能有点…

jvm 各个版本支持的参数 容器化部署

知道一些 jvm 调优参数&#xff0c;但是没有找到官网对应的文档&#xff0c;在网上的一些文章偶然发现&#xff0c;记录一下。 https://docs.oracle.com/en/java/javase/ 包含各个版本 jdk 8 分为 windows 和 unix 系统 https://docs.oracle.com/javase/8/docs/technotes/too…

Volatile 可以保证什么特性?有什么作用?

Volatile 可以保证什么特性&#xff1f;有什么作用&#xff1f; 可以保证可见性&#xff0c;有序性&#xff0c;禁止指令重排序。但是不能保证原子性。线程上下文切换的时候&#xff0c;还是有可能出现线程安全问题。 cpu 都是把数据从内存拉取到自己的缓存中进行运算&#xff…

在Espressif-IDE中使用Wokwi仿真ESP32

陈拓 2023/10/17-2023/10/19 1. 概述 在Espressif-IDE v2.9.0版本之后可直接在IDE中使用Wokwi模拟器。 1.1 什么是 Wokwi 模拟器&#xff1f; Wokwi 是一款在线电子模拟器&#xff0c;支持模拟各种开发板、元器件和传感器&#xff0c;例如乐鑫产品 ESP32。 Wokwi 提供基于浏…

Vue3.0的设计目标是什么?做了哪些优化

一、设计目标 不以解决实际业务痛点的更新都是耍流氓&#xff0c;下面我们来列举一下Vue3之前我们或许会面临的问题 随着功能的增长&#xff0c;复杂组件的代码变得越来越难以维护缺少一种比较「干净」的在多个组件之间提取和复用逻辑的机制类型推断不够友好bundle的时间太久…

游戏行业多元化发展,手游品牌强势出圈的秘诀是什么?

消费观念的转变和社会风气的逐渐开放使手游市场日趋成熟&#xff0c;如今的手游市场面临不少机遇与挑战&#xff0c;游戏行业的多元化发展使玩家们对手游的质量要求更进一步&#xff0c;那么在竞争激烈的手游市场中&#xff0c;手游品牌如何在拥挤的市场中获取更多曝光机会呢&a…

零基础也能制作电子期刊,这个网站你一定不能错过

对于那些想要制作电子期刊但又没有任何基础的人来说&#xff0c;这个网站是一个非常不错的选择。它提供了一系列简单易用的工具和资源&#xff0c;可以帮助你轻松地创建出专业水准的电子期刊。这个网站就是FLBOOK在线制作电子杂志平台。 首先&#xff0c;FLBOOK提供了丰富的模板…

windows 11 安装PHP8.2

环境说明 windows:windows 11 x64apache: Apache/2.4.43php :php-8.2.11 一.php 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php8apache2_4.dll这个文件&#xff1b;如果使用Apache作为服务器…

图片拼接:如何将一堆杂乱无章的图片变成一个有意义的、协调的整体

在数字时代的汪洋大海中&#xff0c;我们常常被无数的图片所包围。如何将这些杂乱无章的图片变成一个有意义的、协调的整体&#xff0c;仿佛是一个充满挑战的英雄之旅。本文将为你揭示这个过程的秘密&#xff0c;并介绍一种创新性的图片管理方法。 面对图片拼接的挑战 图片拼…