xxl-job集成达梦数据库

文章详细介绍了如何将xxl-job集成到达梦数据库,包括使用特定版本的xxl-job-admin,添加达梦数据驱动依赖,修改数据库连接配置,提供适应达梦数据库的初始化SQL脚本,并着重解决了因MyBatis的mapper文件中的MySQL语法导致的启动报错问题,提供了修改后的XxlJobRegistryMapper.xml内容。
摘要由CSDN通过智能技术生成

1、前言

        由于甲方特殊要求,数据库指定达梦,xxl-job集成达梦的案例,博客上也是万紫千红,但并没有能够单独完美运行的案例,花了很多时间,踩了很多坑,终于把xxl-job集成达梦数据库sql兼容性问题解决。整理不易,望诸君高台贵手,点赞支持。

2、集成xxl-job

2.1 相关版本

本人使用xxl-job-admin版本对应2.4.0,这个可以直接官方网址下载

gitee地址:2.4.0版本

github地址:GitHub - xuxueli/xxl-job at 2.4.0

 xxl-job官方文档地址:分布式任务调度平台XXL-JOB

2.2 达梦数据驱动maven地址

<!-- https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18 -->
		<dependency>
			<groupId>com.dameng</groupId>
			<artifactId>DmJdbcDriver18</artifactId>
			<version>8.1.2.192</version>
		</dependency>

此为达梦截止到当前时间点,最新官方驱动地址

2.3 修改项目数据库连接方式

  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    url: 'jdbc:dm://ip:端口?schema=用户名'
    username: 账号
    password: 密码

连接达梦数据库,如有不明白的,可以自行百度(相关文档很多)

2.4 最重要地方-初始化sql脚本

-- XXL_JOB_GROUP definition

-- Drop table

-- DROP TABLE XXL_JOB_GROUP;

CREATE TABLE XXL_JOB_GROUP (
	ID INT NOT NULL,
	APP_NAME VARCHAR(100) NOT NULL,
	TITLE VARCHAR(100) NOT NULL,
	ADDRESS_TYPE INT DEFAULT 0 NOT NULL,
	ADDRESS_LIST TEXT,
	UPDATE_TIME TIMESTAMP,
	CONSTRAINT CONS134218943 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555778 ON XXL_JOB_GROUP (ID);


-- XXL_JOB_INFO definition

-- Drop table

-- DROP TABLE XXL_JOB_INFO;

CREATE TABLE XXL_JOB_INFO (
	ID INT NOT NULL,
	JOB_GROUP INT NOT NULL,
	JOB_DESC VARCHAR(255) NOT NULL,
	ADD_TIME TIMESTAMP,
	UPDATE_TIME TIMESTAMP,
	AUTHOR VARCHAR(64),
	ALARM_EMAIL VARCHAR(255),
	SCHEDULE_TYPE VARCHAR(50) DEFAULT 'NONE' NOT NULL,
	SCHEDULE_CONF VARCHAR(128),
	MISFIRE_STRATEGY VARCHAR(50) DEFAULT 'DO_NOTHING' NOT NULL,
	EXECUTOR_ROUTE_STRATEGY VARCHAR(50),
	EXECUTOR_HANDLER VARCHAR(255),
	EXECUTOR_PARAM VARCHAR(512),
	EXECUTOR_BLOCK_STRATEGY VARCHAR(50),
	EXECUTOR_TIMEOUT INT DEFAULT 0 NOT NULL,
	EXECUTOR_FAIL_RETRY_COUNT INT DEFAULT 0 NOT NULL,
	GLUE_TYPE VARCHAR(50) NOT NULL,
	GLUE_SOURCE CLOB,
	GLUE_REMARK VARCHAR(128),
	GLUE_UPDATETIME TIMESTAMP,
	CHILD_JOBID VARCHAR(255),
	TRIGGER_STATUS INT DEFAULT 0 NOT NULL,
	TRIGGER_LAST_TIME BIGINT DEFAULT 0 NOT NULL,
	TRIGGER_NEXT_TIME BIGINT DEFAULT 0 NOT NULL,
	CONSTRAINT CONS134218944 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555780 ON XXL_JOB_INFO (ID);


-- XXL_JOB_LOCK definition

-- Drop table

-- DROP TABLE XXL_JOB_LOCK;

CREATE TABLE XXL_JOB_LOCK (
	LOCK_NAME VARCHAR(50) NOT NULL,
	CONSTRAINT CONS134218945 PRIMARY KEY (LOCK_NAME)
);
CREATE UNIQUE INDEX INDEX33555782 ON XXL_JOB_LOCK (LOCK_NAME);


-- XXL_JOB_LOG definition

-- Drop table

-- DROP TABLE XXL_JOB_LOG;

CREATE TABLE XXL_JOB_LOG (
	ID BIGINT NOT NULL,
	JOB_GROUP INT NOT NULL,
	JOB_ID INT NOT NULL,
	EXECUTOR_ADDRESS VARCHAR(255),
	EXECUTOR_HANDLER VARCHAR(255),
	EXECUTOR_PARAM VARCHAR(512),
	EXECUTOR_SHARDING_PARAM VARCHAR(20),
	EXECUTOR_FAIL_RETRY_COUNT INT DEFAULT 0 NOT NULL,
	TRIGGER_TIME TIMESTAMP,
	TRIGGER_CODE INT NOT NULL,
	TRIGGER_MSG TEXT,
	HANDLE_TIME TIMESTAMP,
	HANDLE_CODE INT NOT NULL,
	HANDLE_MSG TEXT,
	ALARM_STATUS TINYINT DEFAULT 0 NOT NULL,
	CONSTRAINT CONS134218946 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555784 ON XXL_JOB_LOG (ID);
CREATE INDEX I_HANDLE_CODE ON XXL_JOB_LOG (HANDLE_CODE);
CREATE INDEX I_TRIGGER_TIME ON XXL_JOB_LOG (TRIGGER_TIME);


-- XXL_JOB_LOG_REPORT definition

-- Drop table

-- DROP TABLE XXL_JOB_LOG_REPORT;

CREATE TABLE XXL_JOB_LOG_REPORT (
	ID INT NOT NULL,
	TRIGGER_DAY TIMESTAMP,
	RUNNING_COUNT INT DEFAULT 0 NOT NULL,
	SUC_COUNT INT DEFAULT 0 NOT NULL,
	FAIL_COUNT INT DEFAULT 0 NOT NULL,
	UPDATE_TIME TIMESTAMP,
	CONSTRAINT CONS134218948 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555790 ON XXL_JOB_LOG_REPORT (ID);
CREATE UNIQUE INDEX INDEX33555791 ON XXL_JOB_LOG_REPORT (TRIGGER_DAY);


-- XXL_JOB_LOGGLUE definition

-- Drop table

-- DROP TABLE XXL_JOB_LOGGLUE;

CREATE TABLE XXL_JOB_LOGGLUE (
	ID INT NOT NULL,
	JOB_ID INT NOT NULL,
	GLUE_TYPE VARCHAR(50),
	GLUE_SOURCE CLOB,
	GLUE_REMARK VARCHAR(128) NOT NULL,
	ADD_TIME TIMESTAMP,
	UPDATE_TIME TIMESTAMP,
	CONSTRAINT CONS134218947 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555788 ON XXL_JOB_LOGGLUE (ID);


-- XXL_JOB_REGISTRY definition

-- Drop table

-- DROP TABLE XXL_JOB_REGISTRY;

CREATE TABLE XXL_JOB_REGISTRY (
	ID INT NOT NULL,
	REGISTRY_GROUP VARCHAR(50) NOT NULL,
	REGISTRY_KEY VARCHAR(255) NOT NULL,
	REGISTRY_VALUE VARCHAR(255) NOT NULL,
	UPDATE_TIME TIMESTAMP,
	CONSTRAINT CONS134218950 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555793 ON XXL_JOB_REGISTRY (ID);
CREATE INDEX I_G_K_V ON XXL_JOB_REGISTRY (REGISTRY_GROUP,REGISTRY_KEY,REGISTRY_VALUE);


-- XXL_JOB_USER definition

-- Drop table

-- DROP TABLE XXL_JOB_USER;

CREATE TABLE XXL_JOB_USER (
	ID INT NOT NULL,
	USERNAME VARCHAR(50) NOT NULL,
	PASSWORD VARCHAR(50) NOT NULL,
	"ROLE" TINYINT NOT NULL,
	PERMISSION VARCHAR(255),
	CONSTRAINT CONS134218951 PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33555796 ON XXL_JOB_USER (ID);
CREATE UNIQUE INDEX INDEX33555797 ON XXL_JOB_USER (USERNAME);

INSERT INTO XXL_JOB_USER (USERNAME,PASSWORD,"ROLE",PERMISSION) VALUES ('admin','827ccb0eea8a706c4c34a16891f84e7b',1,'');

因达梦数据库,和mysql的执行脚本,在语法上,大体相同,只是相关字段类型定义上,有出入,当然如果是达梦数据库高手,可以直接通过达梦提供的官方数据迁移工具,直接把官方提供的mysql脚本,迁移到达梦数据库,也是完美的解决方案;

上述sql最后一行,插入xxl-job-admin管理平台默认登录账号密码
账号:admin 密码:123456

2.5 重重重点来了!!

把sql导入到达梦数据库是第一步,此时的xxl-job-admin要想运行起来,还是不行的

因xxl-job-admin,XxlJobRegistryMapper.xml用了一些mysql的语法,在达梦数据库无法兼容,会

导致启动报错,所以XxlJobRegistryMapper可以直接替换为下方代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobRegistryDao">
	
	<resultMap id="XxlJobRegistry" type="com.xxl.job.admin.core.model.XxlJobRegistry" >
		<result column="id" property="id" />
	    <result column="registry_group" property="registryGroup" />
	    <result column="registry_key" property="registryKey" />
	    <result column="registry_value" property="registryValue" />
		<result column="update_time" property="updateTime" />
	</resultMap>

	<sql id="Base_Column_List">
		t.id,
		t.registry_group,
		t.registry_key,
		t.registry_value,
		t.update_time
	</sql>

	<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 SECOND (#{timeout},0))-->
		<!--WHERE t.update_time <![CDATA[ > ]]> DATE_ADD(#{nowTime},numtodsinterval(#{timeout},'SECOND'))-->
		WHERE t.update_time <![CDATA[ < ]]> (#{nowTime}+numtodsinterval(-#{timeout},'SECOND'))

	</select>
	
	<delete id="removeDead" parameterType="java.lang.Integer" >
		DELETE FROM xxl_job_registry
		WHERE id in
		<foreach collection="ids" item="item" open="(" close=")" separator="," >
			#{item}
		</foreach>
	</delete>

	<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[ > ]]> ADD_DAYS(#{nowTime},INTERVAL SECOND (#{timeout},0))-->
		<!--WHERE t.update_time <![CDATA[ <]]> DATE_ADD(#{nowTime},numtodsinterval(#{timeout},'SECOND'))-->
		WHERE t.update_time <![CDATA[ > ]]> (#{nowTime}+numtodsinterval(-#{timeout},'SECOND'))

	</select>

    <update id="registryUpdate" >
        UPDATE xxl_job_registry
        SET update_time = #{updateTime}
        WHERE registry_group = #{registryGroup}
          AND registry_key = #{registryKey}
          AND registry_value = #{registryValue}
    </update>

    <insert id="registrySave" >
        INSERT INTO xxl_job_registry( registry_group , registry_key , registry_value, update_time)
        VALUES( #{registryGroup},#{registryKey},#{registryValue},#{updateTime})
    </insert>

	<delete id="registryDelete" >
		DELETE FROM xxl_job_registry
		WHERE registry_group = #{registryGroup}
			AND registry_key = #{registryKey}
			AND registry_value = #{registryValue}
	</delete>

</mapper>

上述sql,尤其注意,t.update_time <![CDATA[ < ]]> (#{nowTime}+numtodsinterval(-#{timeout},'SECOND')),这里的写法,这里是导致xxl-job-admin无法发现注册的执行器ip的关键 

3、总结

执行器如果注册到xxl-job-admin 直接参考官方案例

需要注意,一定要把官方执行器demo中XxlJobConfig这个类,复制到自己需要调用xxl-job-admin工程内,该方法,本质上就是开启线程,把当前工程,注册进xxl-job-admin。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan4609

整理不易,谢谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值