定时任务xxl-job国产化改造,适配磐维数据库(PostgreSQL)

前言

因公司要求系统需要全面国产化改造,其中也涉及到定时任务xxl-job的改造。

使用的xxl-job版本为:2.5.0

一、修改配置

1、修改pom.xml,引入postgresql组件

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

2、修改application,删除mysql配置,增加postgresql配置

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=root_pwd
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-
 ### datasource-pool
 spring.datasource.type=com.zaxxer.hikari.HikariDataSource
 spring.datasource.hikari.minimum-idle=10
@@ -40,6 +37,7 @@ spring.datasource.hikari.max-lifetime=900000
 spring.datasource.hikari.connection-timeout=10000
 spring.datasource.hikari.connection-test-query=SELECT 1
 spring.datasource.hikari.validation-timeout=1000
+# spring.datasource.hikari.schema=xxl_job

二、修改SQL,适配postgresql

1、文件路径:xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml

XML 复制代码
-               INSERT INTO xxl_job_group ( `app_name`, `title`, `address_type`, `address_list`, `update_time`)
+               INSERT INTO xxl_job_group ( app_name, title, address_type, address_list, update_time)
XML 复制代码
-               SET `app_name` = #{appname},
-                       `title` = #{title},
-                       `address_type` = #{addressType},
-                       `address_list` = #{addressList},
-                       `update_time` = #{updateTime}
+               SET app_name = #{appname},
+                       title = #{title},
+                       address_type = #{addressType},
+                       address_list = #{addressList},
+                       update_time = #{updateTime}

2、文件路径:xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml

XML 复制代码
        <insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogGlue" useGeneratedKeys="true" keyProperty="id" >
                INSERT INTO xxl_job_logglue (
-                       `job_id`,
-                       `glue_type`,
-                       `glue_source`,
-                       `glue_remark`,
-                       `add_time`,
-                       `update_time`
+                       job_id,^M
+                       glue_type,^M
+                       glue_source,^M
+                       glue_remark,^M
+                       add_time, ^M
+                       update_time^M
                ) VALUES (
                        #{jobId},
                        #{glueType},
XML 复制代码
                WHERE id NOT in(
                        SELECT id FROM(
                                SELECT id FROM xxl_job_logglue
-                               WHERE `job_id` = #{jobId}
+                               WHERE job_id = #{jobId}^M
                                ORDER BY update_time desc
                                LIMIT 0, #{limit}
                        ) t1
-               ) AND `job_id` = #{jobId}
+               ) AND job_id = #{jobId}
XML 复制代码
        <delete id="deleteByJobId" parameterType="java.lang.Integer" >
                DELETE FROM xxl_job_logglue
-               WHERE `job_id` = #{jobId}
+               WHERE job_id = #{jobId}^M
        </delete>

3、xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml

XML 复制代码
        <insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
                INSERT INTO xxl_job_log (
-                       `job_group`,
-                       `job_id`,
-                       `trigger_time`,
-                       `trigger_code`,
-                       `handle_code`
+                       job_group,
+                       job_id,
+                       trigger_time,
+                       trigger_code,
+                       handle_code
XML 复制代码
        <update id="updateTriggerInfo" >
                UPDATE xxl_job_log
                SET
-                       `trigger_time`= #{triggerTime},
-                       `trigger_code`= #{triggerCode},
-                       `trigger_msg`= #{triggerMsg},
-                       `executor_address`= #{executorAddress},
-                       `executor_handler`=#{executorHandler},
-                       `executor_param`= #{executorParam},
-                       `executor_sharding_param`= #{executorShardingParam},
-                       `executor_fail_retry_count`= #{executorFailRetryCount}
-               WHERE `id`= #{id}
+                       trigger_time= #{triggerTime},
+                       trigger_code= #{triggerCode},
+                       trigger_msg= #{triggerMsg},
+                       executor_address= #{executorAddress},
+                       executor_handler=#{executorHandler},
+                       executor_param= #{executorParam},
+                       executor_sharding_param= #{executorShardingParam},
+                       executor_fail_retry_count= #{executorFailRetryCount}
+               WHERE id= #{id}
        </update>
XML 复制代码
        <update id="updateHandleInfo">
                UPDATE xxl_job_log
                SET
-                       `handle_time`= #{handleTime},
-                       `handle_code`= #{handleCode},
-                       `handle_msg`= #{handleMsg}
-               WHERE `id`= #{id}
+                       handle_time= #{handleTime},
+                       handle_code= #{handleCode},
+                       handle_msg= #{handleMsg}
+               WHERE id= #{id}
        </update>
XML 复制代码
        <select id="findFailJobLogIds" resultType="long" >
-               SELECT id FROM `xxl_job_log`
-               WHERE !(
+               SELECT id FROM xxl_job_log
+               WHERE NOT(
                        (trigger_code in (0, 200) and handle_code = 0)
                        OR
                        (handle_code = 200)
                )
-               AND `alarm_status` = 0
+               AND alarm_status = 0
                ORDER BY id ASC
                LIMIT #{pagesize}
        </select>
XML 复制代码
        <update id="updateAlarmStatus" >
                UPDATE xxl_job_log
                SET
-                       `alarm_status` = #{newAlarmStatus}
-               WHERE `id`= #{logId} AND `alarm_status` = #{oldAlarmStatus}
+                       alarm_status = #{newAlarmStatus}
+               WHERE id= #{logId} AND alarm_status = #{oldAlarmStatus}
        </update>

4、xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml

XML 复制代码
        <insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
                INSERT INTO xxl_job_log_report (
-                       `trigger_day`,
-                       `running_count`,
-                       `suc_count`,
-                       `fail_count`
+                       trigger_day,
+                       running_count,
+                       suc_count,
+                       fail_count
                ) VALUES (
                        #{triggerDay},
                        #{runningCount},
XML 复制代码
        <update id="update" >
         UPDATE xxl_job_log_report
-        SET `running_count` = #{runningCount},
-               `suc_count` = #{sucCount},
-               `fail_count` = #{failCount}
-        WHERE `trigger_day` = #{triggerDay}
+        SET running_count = #{runningCount},
+               suc_count = #{sucCount},
+               fail_count = #{failCount}
+        WHERE trigger_day = #{triggerDay}
     </update>

5、xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml

XML 复制代码
        <select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >
                SELECT t.id
                FROM xxl_job_registry AS t
-               WHERE t.update_time <![CDATA[ < ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
+               WHERE t.update_time <![CDATA[ < ]]> NOW() - INTERVAL '${timeout} seconds'
        </select>
XML 复制代码
        <select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry">
                SELECT <include refid="Base_Column_List" />
                FROM xxl_job_registry AS t
-               WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},INTERVAL -#{timeout} SECOND)
+               WHERE t.update_time <![CDATA[ > ]]> NOW() - INTERVAL '${timeout} seconds'
        </select>
XML 复制代码
     <update id="registryUpdate" >
         UPDATE xxl_job_registry
-        SET `update_time` = #{updateTime}
-        WHERE `registry_group` = #{registryGroup}
-          AND `registry_key` = #{registryKey}
-          AND `registry_value` = #{registryValue}
+        SET update_time = #{updateTime}
+        WHERE registry_group = #{registryGroup}
+          AND registry_key = #{registryKey}
+          AND registry_value = #{registryValue}
     </update>
XML 复制代码
     <insert id="registrySave" >
-        INSERT INTO xxl_job_registry( `registry_group` , `registry_key` , `registry_value`, `update_time`)
+        INSERT INTO xxl_job_registry( registry_group , registry_key , registry_value, update_time)
         VALUES( #{registryGroup}  , #{registryKey} , #{registryValue}, #{updateTime})
     </insert>

总结

因为公司要求系统国产化,所以得把定时任务xxl-job改造适配磐维数据库,大体步骤如下。

1、修改配置。

2、修改SQL,适配postgresql。

最后因本人能力有限,有什么不对的地方望各位大佬指出好让我改进,多多包含,谢谢大家。

相关推荐
qq_339282232 小时前
PostgreSQL无法查看表中数据问题排查
数据库·postgresql·oracle
菜是一种态度9 小时前
PostgreSQL数据库操作SQL
数据库·sql·postgresql
菜是一种态度1 天前
PostgreSQL运算符
postgresql·运算符
forestsea1 天前
Nacos-3.0.0适配PostgreSQL数据库
数据库·postgresql·nacos
遇见火星1 天前
Linux安装部署Postgresql数据库
linux·数据库·postgresql
JuannyOh2 天前
达梦数据库官方迁移工具SQLark:支持Oracle/MySQL/PostgreSQL迁移至达梦数据库!
mysql·postgresql·oracle·达梦数据库·迁移工具
❀͜͡傀儡师2 天前
基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表
数据库·spring boot·postgresql
桥Dopey2 天前
关系型数据库PostgreSQL vs MySQL 深度对比:专业术语+白话解析+实战案例
mysql·postgresql·关系型数据库
king_harry2 天前
PostgreSQL Patroni集群组件作用介绍:Patroni、etcd、HAProxy、Keepalived、Watchdog
数据库·postgresql·集群cluster