xxl-job 适配人大金仓数据库 V8R6

前言

由于一些众所周知的原因,项目需要需要进行改造使其适配人大金仓的数据库。

xxl-job适配人大金仓

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

  • mysql上的xxl-job库 迁移到 人大金仓数据库上
  • pom中新增依赖 kingbase8 驱动 注意版本
    <!--KingBase-->
    <dependency><groupId>cn.com.kingbase</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version>
    </dependency>
    
  • 注释掉 原有的MySQL驱动
    在这里插入图片描述
  • 修改application.properties 数据库连接以及账号密码 还有驱动类
### xxl-job, datasource
## 修改为人大金仓的 数据库协议 数据库地址 以及账号密码 
spring.datasource.url=jdbc:kingbase8://xx:xxx/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xx
spring.datasource.password=xxx
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 替换驱动为 kingbase8的驱动
spring.datasource.driver-class-name=com.kingbase8.Driver

配置没问题的话 应该就可以启动了

接下来会遇到第一个问题

com.xxl.job.admin.core.thread.JobScheduleHelper#start的 73行

                        preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );

提示xxl_job_lock表不存在 但是数据库里是存在的
经查阅资料发现 加上库名即可 (可能读取的datasource没有包含库名 应该是个bug)
解决: 修改为如下 增加库名

                        preparedStatement = conn.prepareStatement(  "select * from xxl_job.xxl_job_lock where lock_name = 'schedule_lock' for update" );

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

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

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

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

第三个问题
com.xxl.job.admin.core.thread.JobRegistryHelper#start 66行 报错

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

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

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

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

类似的修改 等等

官方的地址说明: https://help.kingbase.com.cn/v8/development/sql-plsql/ref-extended-plug-in/kdb_date_function.html#id5

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

直接在工具类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 tWHERE t.update_time <![CDATA[ < ]]> #{nowTime}
</select><select id="findAllByTime" resultType="com.xxl.job.admin.core.model.XxlJobRegistry">SELECT <include refid="Base_Column_List" />FROM xxl_job.xxl_job_registry AS tWHERE 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);

第四个问题 最**

sql语句中找不到 表 报错提示: bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: 错误: 关系 “表名” 不存在

第一个问题的解决办法适用于SQL不多的场景 要是SQL 过多 SQL改动就很大

找不到表的问题解决办法: 新建一个人大金仓的数据库账号 账号为 xxl_job 然后修改 application.properties 的数据库连接信息

spring.datasource.url=jdbc:kingbase8://xxx:54321/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xxl_job
spring.datasource.password=xxxx
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=com.kingbase8.Driver

其他找不到的表的问题 也可参考此方案 如果项目使用到test 库 项目中使用人大金仓的数据库 提示表不存在 (确保表真的存在) 然后新建的 对应库名的账号 然后项目配置中替换用户密码配置

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

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

相关文章

连接数据库(MySQL)的JDBC

目录 JDBC简介快速入门API详解DriverManager&#xff08;驱动管理类&#xff09;注册驱动&#xff1a;获取数据库连接(对象)&#xff1a; Connection&#xff08;数据库连接对象&#xff09;获取执行SQL的对象管理事务 Statement(执行SQL语句)执行DML、DDL语句执行DQL语句 Resu…

Sora那么牛,他的模型的成本会有多少呢?

Sora的训练需要大量的计算资源&#xff0c;估计需要4211-10528个 Nvidia H100 GPUs运行一个月。推理成本&#xff1a;一个Nvidia H100 GPU大约每小时能生成5分钟的视频。初期的Sora成本将非常高&#xff0c;肯定是不适合普通人来使用&#xff0c;所以目前OpenAI都是先找一些艺术…

STM32串口收发单字节数据原理及程序实现

线路连接&#xff1a; 显示屏的SCA接在B11&#xff0c;SCL接在B10&#xff0c;串口的RX连接A9&#xff0c;TX连接A10。 程序编写&#xff1a; 在上一个博客中实现了串口的发送代码&#xff0c;这里实现串口的接收代码&#xff0c;在上一个代码的基础上增加程序功能。 Seiral.…

创建AI智能体

前言 灵境矩阵是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&#xff0c;打造大模型时代的产品能力。开发者可以通过 prompt 编排的方式低成本开发智能体&am…

VMware和Xshell连接

1.开启虚拟机 2.使用管理员账户&#xff0c;点击未列出 3.输入用户名密码 4.点击编辑虚拟网络编辑器 5.记住自己的网关和IP地址 6.打开终端 7.输入命令&#xff0c;vim / etc / sysconfig / network -scripts / ifcfg-ens33 回车 8.修改图中两处按“ I ”键进入编辑 d…

计算机组成原理-6-计算机的运算方法

6. 计算机的运算方法 文章目录 6. 计算机的运算方法6.1 机器数的表示6.1.1 无符号数和有符号数6.1.2 有符号数-原码6.1.3 有符号数-补码6.1.4 有符号数-反码6.1.5 有符号数-移码6.1.6 原码、补码、反码的比较 6.2 数的定点表示和浮点表示6.2.1 定点表示6.2.2 浮点表示6.2.3 ΔI…

C语言程序编译和链接

翻译环境和运行环境 我们程序员天天要写代码&#xff0c;那我们天天写的代码是什么呢&#xff1f;我们写的其实莫过于是一些test.c文件和test.h这样的文件。都是一些文本信息&#xff0c;这些如果直接交给机器去处理机器是看不懂的&#xff0c;就像我们和外国人语言不通一样&…

如何使用ChatGPT准备即将到来的面试How to Use ChatGPT to Prepare for an Upcoming Interview

使用ChatGPT来准备即将到来的面试可以非常有帮助&#xff0c;因为它可以模拟真实的面试场景并提供反馈。以下是一些步骤和提示&#xff0c;说明如何利用ChatGPT进行面试准备&#xff1a; 研究职位和公司&#xff1a;在与ChatGPT对话之前&#xff0c;先对你申请的职位和公司进行…

js算法记录

> 更多请前往 https://www.passerma.com/article/86 滑动窗口 1 给定一个矩阵&#xff0c;包含N*M个整数&#xff0c;和一个包含K个整数的数组。现在要求在这个矩阵中找一个宽度最小的子矩阵&#xff0c;要求子矩阵包含数组中所有的整数 function minSubmatrixWidth(mat…

JAVA面试大全之JVM和调休篇

目录 1、类加载机制 1.1、类加载的生命周期&#xff1f; 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别? 1.4、JVM有哪些类加载机制&#xff1f; 2、内存结构 2.1、说说JVM内存整体的结构&#xff1f;线程私有还是共享的&#xff1f; 2.2…

深入理解SSL协议:从理论到实践(二)

前言 这是一篇关于SSL协议的技术文章&#xff0c;有理论知识&#xff0c;但又兼具一定的实战性&#xff0c;文章的主要内容分享了SSL协议的核心概念、工作原理、常见的应用场景&#xff0c;以及就https这种实际应用场景&#xff0c;又着重分享具体的工作原理以及如何实现https…

鸿蒙HarmonyOS应用开发之使用Node-API接口创建ArkTs运行时环境

场景介绍 开发者通过pthread_create创建新线程后&#xff0c;可以通过napi_create_ark_runtime来创建一个新的ArkTs基础运行时环境&#xff0c;并通过该运行时环境加载ArkTs模块&#xff0c;目前仅支持在ArkTs模块中使用console接口打印日志&#xff0c;使用timer定时器功能。…

气体间隙的击穿强度

本篇为本科课程《高电压工程基础》的笔记。 气体间隙的击穿电压难以精确计算。工程应用中&#xff0c;大多参照一些典型的击穿电压试验数据来选择绝缘距离&#xff0c;要求较高的情况下感召实际电极布置&#xff0c;用实验方法来确定击穿电压。 稳态电压下的击穿 直流与工频…

SpringBoot 多数据源及事务解决方案

1. 背景 一个主库和N个应用库的数据源&#xff0c;并且会同时操作主库和应用库的数据&#xff0c;需要解决以下两个问题&#xff1a; 如何动态管理多个数据源以及切换&#xff1f; 如何保证多数据源场景下的数据一致性(事务)&#xff1f; 本文主要探讨这两个问题的解决方案…

全国植被类型分布数据

引言 全国植被类型分布数据利用 Landsat 卫星数据&#xff08;Landsat TM&#xff0c;ETM和 OLI&#xff09;完成了长时序的地表覆盖变化检测&#xff0c;并结合变化 检测结果实现了逐区域和逐期的地表覆盖动态更新&#xff0c;30米精细植被类型分布数据&#xff0c;共包含 2…

Python爬虫之爬取网页图片

当我们想要下载网页的图片时&#xff0c;发现网页的图片太多了&#xff0c;无从下手&#xff0c;那我们写一个脚本来爬取呗。 这次的脚本是专门针对某个外国网站使用的&#xff0c;因此仅供参考思路。 在测试的过程中&#xff0c;我发现网站使用了发爬虫机制&#xff0c;具体就…

FPGA工程师及其相关岗位招聘~

社区的招聘功能上线之后&#xff0c;许多企业都在上面发布了招聘岗位。 目前有30企业&#xff0c;岗位围绕FPGA工程师&#xff0c;涵盖嵌入式软件工程师、射频工程师、C语言开发、BMC工程师等等&#xff0c;入口放在这里&#xff1a;F学社-全球FPGA技术提升平台 登录账号后&a…

HCIP-Datacom(H12-821)题库补充(3/27)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 运行OSPF协议的路由器&#xff0c;所有接口必须属于同一个区域。 A&#xff1a;正确 B&#xff1a;错误 答案&#xff1a;B 解析&#xff1a;OSPF的邻居关系是基于…

Python环境下滚动轴承状态监测与故障诊断(NASA IMS轴承数据集)

智能维护系统IMS)滚动轴承数据是美国辛辛那提大学智能维护系统中心提供的全寿命周期数据&#xff0c;轴上安装了4个轴承。通过摩擦带将转速保持恒定在 2000r/min。包含3个数据集&#xff0c;每个数据集描述了一个测试到失败的实验。其中第一个实验装置的数据采集从 2003 年 10月…

鸿蒙OS开发实例:【工具类封装-emitter组件间通信】

import Emitter from ohos.events.emitter; import pasteboard from ohos.pasteboard; MyEmitterUtil 是一个针对 HarmonyOS 的事件驱动编程封装类&#xff0c;主要用于组件间的通信和数据传递。 使用要求&#xff1a; DevEco Studio 3.1.1 Release 或更高版本API 版本&…