xxl-job 适配达梦数据库

news2024/9/28 4:16:28

前言

在数字化转型的浪潮中,任务调度成为了后端服务不可或缺的一部分。XXL-JOB 是一个轻量级、分布式的任务调度框架,广泛应用于各种业务场景。达梦数据库(DM),作为一款国内领先的数据库产品,已经被越来越多的企业采用。本文将介绍如何将 XXL-JOB 适配到达梦数据库,实现任务调度的国产化支持。

Nacos 配置管理介绍

Nacos 提供了配置管理功能,支持动态配置更新,使得微服务架构中的配置管理更加灵活和高效。

达梦数据库介绍

达梦数据库是一款关系型数据库管理系统,具有高性能、高可用性、易于维护等特点,广泛应用于政府、金融、电信等行业。

环境准备

在开始之前,请确保已经准备好以下环境:

XXL-JOB:下载 XXL-JOB 的最新版本。并构建
达梦数据库:安装并启动达梦数据库。 mysql上的xxl-job库 迁移到达梦数据库上 最好使用传输工具进行传输 避免不必要用的问题
JDK:确保已安装 JDK 1.8 或以上版本。

xxl-job适配人大金仓

特此说明: 当前修改的xxl-job版本 为 2.4.1-SNAPSHOT

源码修改

pom中新增依赖 DmJdbcDriver18 驱动 注意版本

<!-- dameng -->
<dependency>
   <groupId>com.dameng</groupId>
   <artifactId>DmJdbcDriver18</artifactId>
   <version>8.1.3.140</version>
</dependency>
  • 注释掉 原有的MySQL驱动
    在这里插入图片描述

修改xxl-job 数据库连接以及账号密码 还有驱动类

## 注释掉原有的数据库配置
spring.datasource.url=jdbc:dm://dm连接IP:5236/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

数据库连接 配置没问题的话 应该就可以启动了

问题汇总

Caused by: dm.jdbc.driver.DMException: 第12 行附近出现错误:无效的表或视图名[xxl_job.xxl_job_log]

com.xxl.job.admin.core.thread.JobFailMonitorHelper#start
的41行 提示 xxl_job_log 表不存在
刚开始以为也需要添加库名 ,然后尝试加了 启动依然报错

后续查询资料 是 不支持 `这个符号
解决: 全局替换 xml中的 这个符号即可
示例

<!-- 修改前 -->
<select id="findFailJobLogIds" resultType="long">
    SELECT id
    FROM `xxl_job.xxl_job_log`
    WHERE !(
        (trigger_code in (0
        , 200)
      and handle_code = 0)
       OR
        (handle_code = 200)
        )
      AND alarm_status = 0
    ORDER BY id ASC
        LIMIT #{pagesize}
</select>
<!-- 修改后  -->
<select id="findFailJobLogIds" resultType="long">
    SELECT id
    FROM xxl_job.xxl_job_log
    WHERE !(
        (trigger_code in (0
        , 200)
      and handle_code = 0)
       OR
        (handle_code = 200)
        )
      AND alarm_status = 0
    ORDER BY id ASC
        LIMIT #{pagesize}
</select>

后续 全局替换 xml中的 这个符号即可

函数 DATE ADD(unknown . interval)不存在

com.xxl.job.admin.core.thread.JobRegistryHelper#start 66行 报错

							List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date());

提示 bad SOL grammar 错误:函数 DATE ADD(unknown . interval)不存在
Hint:没有匹配指定名称和参数类型的函数.
您也许需要增加明确的类型转换.

解决- 替换新的实现方式
查询资料说是替换 新的实现方式 尝试多次 均不可

 DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND) 为 
date '${nowTime}' - INTERVAL '${timeout} second'

类似的修改 等等

官方的地址说明: ’
date_add 函数若对添加时间间隔的表达式进行求值,可采用 DM 的
TIMESTAMPADD 函数进行替代,例子如下:


--MySQL
select DATE_ADD(sysdate(), INTERVAL 1 YEAR);
--2020-07-02 11:24:18
-- DM
select TIMESTAMPADD(SQL_TSI_YEAR, 1,sysdate());
--2020-07-02 11:27:56.000000

直接看终极解决办法 替换现有实现
本质来讲就是需要个工具类 将传入的时间减去一个传入的 秒数 返回修改后的时间

直接在工具类com.xxl.job.core.util.DateUtil 中 添加 如下方法

public static Date addSeconds(final Date date, final int amount) {
   return add(date, Calendar.SECOND, amount);
}

然后在 com.xxl.job.admin.dao.XxlJobRegistryDao 新增两个dao的方法

public List<Integer> findDeadByTime(@Param("nowTime") Date nowTime);

public List<XxlJobRegistry> findAllByTime(@Param("nowTime") Date nowTime);

在mapper文件 XxlJobRegistryMapper.xml 中 新增两个方法对应的sql 内容

<select id="findDeadByTime" resultType="java.lang.Integer">
	SELECT <include refid="Base_Column_List" />
	FROM xxl_job.xxl_job_registry AS t
	WHERE t.update_time <![CDATA[ < ]]> #{nowTime}
</select>

<!-- 2024年09月12日16:26:10 新修改  
注意 resultMap 是 map映射 XxlJobRegistry 而不是一个实体类 
否则导致结果集部分参数获取不到-->
<select id="findAllByTime" resultMap="XxlJobRegistry">
	SELECT <include refid="Base_Column_List" />
	FROM xxl_job.xxl_job_registry AS t
	WHERE t.update_time > #{nowTime}
</select>

最后在 com.xxl.job.admin.core.thread.JobRegistryHelper#registryMonitorThread 文件中替换实现

//List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
//新增修改后的内容
Date beforeDate = DateUtil.addSeconds(new Date(), -1 * RegistryConfig.DEAD_TIMEOUT);
List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDeadByTime(beforeDate);
if (ids!=null && ids.size()>0) {
	XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
}

// fresh online address (admin/executor)
HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
//List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
//新增的内容
Date nowDate = DateUtil.addSeconds(new Date(), -1 * RegistryConfig.DEAD_TIMEOUT);
List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAllByTime(nowDate);

com.xxl.job.admin.controller.JobGroupController#findRegistryByAppName 方法中 修改为使用 findAllByTime 方法

Date nowDate = DateUtil.addSeconds(new Date(), -1 * RegistryConfig.DEAD_TIMEOUT);
List<XxlJobRegistry> list = xxlJobRegistryDao.findAllByTime(nowDate);

注意事项

注意dm Caused by: dm.jdbc.driver.DMException: 第12 行附近出现错误:无效的表或视图名[xxl_job.xxl_job_log]

这个报错 不一定是这个表不存在 可能具体的位置的SQL语法有问题 导致这个报错

驱动连接问题

使用正确的驱动 或者直接去dm的安装目录下查找需要使用的版本 再使用jdk8的时候 可以使用DmJdbcDriver18
在这里插入图片描述

*达梦8 JDBC驱动版本说明

  1. DmJdbcDriver16 实现JDBC 4.0标准接口,已在JDK6上验证相关功能
  2. DmJdbcDriver17 实现JDBC 4.1标准接口,已在JDK7上验证相关功能
  3. DmJdbcDriver18 实现JDBC 4.2标准接口,已在JDK8,JDK11,JDK17上验证相关功能

good day!!!

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

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

相关文章

详解调用钉钉AI助理消息API发送钉钉消息卡片给指定单聊用户

文章目录 前言准备工作1、在钉钉开发者后台创建一个钉钉企业内部应用&#xff1b;2、创建并保存好应用的appKey和appSecret&#xff0c;后面用于获取调用API的请求token&#xff1b;3、了解AI助理主动发送消息API&#xff1a;4、应用中配置好所需权限&#xff1a;4.1、权限点4.…

光控资本:国庆节股市能不能继续交易?A股放量大涨

早年这个时分&#xff0c;商场谈论的最多论题是&#xff0c;持股过节仍是持币过节。 而本年却大不一样&#xff0c;“国庆节股市能不能继续生意”成为这两天股民之间的梗。 今天上午&#xff0c;A股继续暴升&#xff0c;创了三个纪录。一是上午成交额为9466亿元&#xff0c;跨…

2024 maya的散布工具sppaint3d使用指南

目前工具其实可以分为三个版本 1 最老的原版 时间还是2011年的&#xff0c;只支持python2版的maya 2 作者python3更新版 后来作者看maya直到2022上还是没有类似好用方便的工具&#xff0c;于是更新到了2022版本 这个是原作者更新的2022版本&#xff0c;改成了python3&#…

一款开源的通用PDF处理神器,功能强悍!

文章目录 前言一、简介二、功能三、安装1.二进制安装2.编译安装 四、开源地址 前言 PDF是一种功能强大且广泛应用的电子文档格式&#xff0c;适用于各种文档管理和共享需求。由于PDF文档注重阅读而非编辑&#xff0c;很多文档处理会让我们非常头疼。 网上有非常多的PDF相关的…

re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)

与ai对抵聊“算式匹配”&#xff0c;发现^从头匹配、(?:xxxx)非捕获组、| “交替”运算符联合使用的妙处。 (笔记模板由python脚本于2024年09月27日 18:35:32创建&#xff0c;本篇笔记适合喜欢python喜欢正则的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;…

《GC8545:智能马桶电路板的卓越替代之选》

在智能马桶领域&#xff0c;电路板的性能至关重要。随着技术的不断发展&#xff0c;寻找更优质、更高效的芯片来替代传统型号已成为行业的趋势。而 GC8545 芯片以其卓越的性能和广泛的适用性&#xff0c;正逐渐成为替代其他型号的理想选择。其中最常用的就是替代的型号LV8548和…

【machine learning-13-线性回归的向量化】

向量化 向量化简洁并行计算 向量化 线性回归的向量化表示如下&#xff0c;其中w 和 x 都分别加了箭头表示这是个向量&#xff0c;后续不加也可以表示为向量&#xff0c;w和x点乘加上b&#xff0c;就构成了多元线性回归的表达方式&#xff0c;如下&#xff1a; 那么究竟为什么…

产品管理-互联网产品(2):需求管理

一、概述 需求问题解决方案&#xff0c;产品经理是解决问题专家。提出求产品经理需要考虑如下四点&#xff1a; 1、客户的目的是什么&#xff1f;2、这条需求是否隐含了解决方案&#xff1f;3、客户的潜在目标是什么&#xff1f;4、如何确定需求已得到满足&#xff1f; 二、…

SD NAND参考设计和使用提示

电路设计 参考电路&#xff1a; R1~R5 (10K-100 kΩ)是上拉电阻&#xff0c;当SD NAND处于高阻抗模式时&#xff0c;保护CMD和DAT线免受总线浮动。 即使主机使用SD NAND SD模式下的1位模式&#xff0c;主机也应通过上拉电阻上拉所有的DATO-3线。 R6&#xff08;RCLK&#…

[数据结构] 二叉树题目 (二)

目录 一. 另一颗树的子树 1.1 题目 1.2 示例 1.3 分析 1.4 解决 二. 平衡二叉树 2.1 题目 2.2 示例 2.3 分析 2.4 解决 三. 二叉树的遍历和创建 3.1 题目 3.2 示例 3.3 解决 一. 另一颗树的子树572. 另一棵树的子树 - 力扣&#xff08;LeetCode&#xff09; 1.1…

Linux开源网络:网络虚拟化

Linux 网络虚拟化的主要技术是网络命名空间以及各类虚拟网络设备。例如要介绍的 veth、Linux bridge、tun/tap 等&#xff0c;这些虚拟网络设备模拟了物理设备的功能&#xff0c;但完全在内核层面由代码实现。容器网络正是基于这些虚拟网络设备&#xff0c;模拟现实世界中的物理…

《自控原理》系统传递函数的零极点模型、分式模型、系统增益

目录 传递函数模型与零极点 系统增益 《自动控制原理》胡寿松&#xff0c;第六版 传递函数模型与零极点 (3-61)所示的是系统的传递函数的分式形式。他一定可以化成&#xff08;3-62&#xff09;形式。 根据3-62的分母可以直接看出系统的特征根&#xff0c;不过要注意&#…

前端框架对比与选择:全面解析前端开发的得力助手

一、引言 在当今快速发展的互联网时代&#xff0c;前端开发扮演着至关重要的角色。前端框架的出现极大地提高了开发效率、提升了用户体验。然而&#xff0c;市场上存在着众多的前端框架&#xff0c;如React、Vue、Angular等&#xff0c;对于开发者来说&#xff0c;如何在这些框…

使用 Paramiko 实现 SSH 远程连接和命令执行

使用 Paramiko 实现 SSH 远程连接和命令执行 每当灶火燃起&#xff0c;香气弥漫&#xff0c;熟悉的味道植入记忆深处&#xff0c;家&#xff0c;才获得完整的意义。万户千家&#xff0c;味道迥异&#xff0c;但幸福的滋味&#xff0c;却何其相同。 ——《风味人间》 在现代网络…

Linux集群部署RabbitMQ

目录 一、准备三台虚拟机&#xff0c;配置相同 1、所有主机都需要hosts文件解析 2、所有主机安装erLang和rabbitmq 3、修改配置文件 4、导入rabbitmq 的管理界面 5、查看节点状态 6、设置erlang运行节点 7、rabitmq2和rabbitmq3重启服务 8、查看各个节点状态 二、添加…

计算机视觉|机器学习中图片特征向量的提取方式:开启图像世界的钥匙

文章目录 什么是特征向量&#xff1f;常见的图片特征向量提取方法1. **手工设计的特征**SIFT&#xff08;尺度不变特征变换&#xff09;HOG&#xff08;方向梯度直方图&#xff09; 2. **卷积神经网络 (CNN)**3. **预训练模型**4. **自监督学习** 结语 今天我们将一起深入探讨机…

powerbi计算销售额同比增长率

在上一篇我们介绍了销售额累计同比增长率的计算方法&#xff0c;本篇将为大家接受销售额同比增长率的计算&#xff0c;建议大家结合上篇阅读&#xff0c;可以比较一下不同之处&#xff0c;注意区分&#xff0c;上一篇链接如下&#xff1a; powerbi计算销售额累计同比增长率——…

基于Hive和Hadoop的共享单车分析系统

本项目是一个基于大数据技术的共享单车分析系统&#xff0c;旨在为用户提供全面的单车使用信息和深入的出行行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 S…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试&#xff1f;三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? &#x1f34e;bug本意是 “…

外国名人面孔识别系统源码分享

外国名人面孔识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…