xxl-job适配postgresql数据库

xxl-job支持了mysql数据库,其他的数据库适配得自己弄一下,下面以目前最新的2.4.1为例进行说明适配postgresql数据库的过程。

获取源代码

从github或gitee获取源代码,目前最新版本2.4.1

xxl官网:分布式任务调度平台XXL-JOB

建立数据库

源代码的doc目录下有mysql建库脚本,在mysql中利用脚本建立数据库,

利用navicat的数据传输功能,将mysql数据库导入到postgresql中,

使用 Navicat 编辑器,手动修改所有表的数字类型字段,添加默认值 0。主键不用添加默认值。例如: int4 NOT NULL 类型为默认 0。

创建 PostgreSQL 序列

sql 复制代码
CREATE SEQUENCE xxl_job_user_id_seq START 1;
CREATE SEQUENCE xxl_job_info_id_seq START 1;
CREATE SEQUENCE xxl_job_log_id_seq START 1;
CREATE SEQUENCE xxl_job_log_report_id_seq START 1;
CREATE SEQUENCE xxl_job_logglue_id_seq START 1;
CREATE SEQUENCE xxl_job_registry_id_seq START 1;
CREATE SEQUENCE xxl_job_group_id_seq START 1;

修改 PostgreSQL 数据库表自增主键

sql 复制代码
ALTER TABLE "public"."xxl_job_user" alter column ID set default nextval('xxl_job_user_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_info" alter column ID set default nextval('xxl_job_info_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_log" alter column ID set default nextval('xxl_job_log_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_log_report" alter column ID set default nextval('xxl_job_log_report_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_logglue" alter column ID set default nextval('xxl_job_logglue_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_registry" alter column ID set default nextval('xxl_job_registry_id_seq'::regclass);
ALTER TABLE "public"."xxl_job_group" alter column ID set default nextval('xxl_job_group_id_seq'::regclass);

修改源代码

修改 POM.xml 依赖,添加postgresql

XML 复制代码
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>42.3.1</version>
</dependency>

在resource下面新建两个文件夹,mysql和postgresql,将mybatis-mapper文件夹下的xml文件拷贝到这两个文件夹下:

修改配置文件,指定xml文件的路径和数据库配置,这样以后就可以兼容两种数据库,根据配置信息使用相应的数据库。

XML 复制代码
mybatis.mapper-locations=classpath:/postgresql/*Mapper.xml

### xxl-job, datasource
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
#spring.datasource.username=root
#spring.datasource.password=123456
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/xxl_job?currentSchema=public
spring.datasource.schemaName=public
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=org.postgresql.Driver

修改postgresql目录下的 Mapper 文件

  • 去掉所有字段名的转义符 ` ,直接用空格替换。
  • 修改 LIMIT #{offset}, #{pagesize} 为 LIMIT #{pagesize} OFFSET #{offset} 。修改LIMIT 0, #{limit}为LIMIT #{limit} OFFSET 0。修改LIMIT 0, #{clearBeforeNum}为LIMIT #{clearBeforeNum} OFFSET 0。LIMIT #{pagesize}保持不变。
  • 修改DATE_ADD(#{nowTime},INTERVAL - #{timeout} SECOND) 为 (#{nowTime}::timestamp - '${timeout} SECONDS'::interval)。
  • 修改 WHERE !( 为 WHERE not ( 。

编译运行,成功

修改后的源代码及数据库建库脚本:

https://download.csdn.net/download/xuruilll/88576748

相关推荐
Elastic 中国社区官方博客3 分钟前
Elastic 重大事件功能如何将 100 条日志样本转化为检测规则
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎
adinnet20263 分钟前
持续智能问数:多轮对话状态管理、下钻钻取与经营驾驶舱的演进
javascript·数据库·人工智能
系统集成-鹰翔40 分钟前
ERP接口月度统计少了零单月份:SQLite分组与最近三个月均值排查
javascript·数据库·经验分享·后端
ClouGence41 分钟前
支付机构为什么需要数据同步:从监管报送到跨云业务协作
数据库·数据分析
wuyk5551 小时前
PyQt6-第14讲-数据库与Excel双向同步
数据库·python·ui·excel·pyqt
乐观的Terry1 小时前
AI翻译助手-JWT与redis无状态认证
数据库·redis·缓存
胖头鱼的鱼缸(尹海文)1 小时前
胖头鱼的技术专栏-482 Oracle AI DB 23.26.4新特性一览(20261027)
数据库·人工智能·oracle
ss2732 小时前
PostgreSQL事务隔离级别与案例
数据库·postgresql
派小心.2 小时前
App数据统计平台怎么选?从SDK接入到日活留存看板的技术实现
数据库·人工智能·小程序
m0_639906942 小时前
MySQL 实现分布式锁:悲观锁、乐观锁、唯一索引锁
数据库·分布式·mysql