定时任务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。

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

相关推荐
白鲸开源11 小时前
新手教程:用外部 PostgreSQL 和 Zookeeper 启动 Dolphinscheduler
postgresql·zookeeper·开源
行星00814 小时前
centos7 aarch64上安装PostgreSQL14.3
linux·运维·数据库·postgresql
烧瓶里的西瓜皮14 小时前
深入理解PostgreSQL的MVCC机制
数据库·postgresql
Jantor2 天前
PostgreSQL 分区最佳实践
数据库·postgresql
booleandev2 天前
PostgreSQL 分区最佳实践
postgresql
勤匠2 天前
在CentOS上以源码编译的方式安装PostgreSQL
linux·postgresql·centos
····懂···2 天前
开源数据库PostgreSQL专家技术
数据库·postgresql·开源
duration~2 天前
PostgreSQL并发控制
数据库·postgresql
希克厉2 天前
PostgreSql基础
postgresql
JohnYan3 天前
工作笔记 - 一种业务信息汇报机制的设计和实现
数据库·后端·postgresql