区块链教程 | 使用达梦数据库(DM)对WeBASE进行适配(一)¶
作者:梁锦辉
作为一个开放、功能丰富的区块链平台, WeBASE致力于提高区块链开发者的运维与管理效率。同时为使用者提供可以适配达梦数据库(DM)(信创环境)的兼容特性;
以下演示,我们通过WeBASE-Sign,为例子做的适配改造。
|前期准备¶
达数据库的安装¶
安装指南可以从达梦数据库(DM)官网获取:https://eco.dameng.com/document/dm/zh-cn/start/install-dm-linux-prepare.html
获取达蒙数据库依赖配置¶
可以在maven或者gradle配置中引入
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.1.193</version>
</dependency>
如果不同DM版本可以从数据库的安装目录下相关说明文档下获取到, 配置方法也可以在数据库安装目录下的\dmdbms\drivers\jdbc\readme.txt中看到依赖配置信息。
DM结合WeBASE-SIGN的适配实现¶
当前WeBase-SIGN是使用的MYSQL作为数据库,达梦数据对MYSQL的兼容性也是比较优化,但存在有些关键语法的问题导致SQL执行不通过; 设计思路,此次改造通过增加使用开关来决定是否达启用达梦数据库(DM),同时也不影响原来WeBase-SIGN支持MYSQL的能力,改造结果就是同时能支持MYSQL或者达梦数据库(DM);
修改配置文件:src/main/resources/application.yml
driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: dm.jdbc.driver.DmDriver
hikari:
connection-test-query: SELECT 1 FROM DUAL
connection-timeout: 30000
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
variables:
isDm8: true
修改映射文件:src/main/resources/mapper/UserDao.xml
<choose>
<when test="${isDm8}">
CREATE TABLE IF NOT EXISTS tb_user
(
user_id INT NOT NULL AUTO_INCREMENT COMMENT '用户编号',
sign_user_id VARCHAR(64) NOT NULL COMMENT '用户唯一的业务编号',
app_id varchar(64) NOT NULL COMMENT '用户对应的应用编号',
address varchar(64) NOT NULL COMMENT '用户地址',
public_key varchar(256) NOT NULL COMMENT '公钥',
private_key varchar(256) NOT NULL COMMENT '私钥',
description varchar(128) DEFAULT NULL COMMENT '描述',
encrypt_type int NOT NULL COMMENT '加密类型,1:国密;0:ECDSA',
gmt_create datetime DEFAULT NULL COMMENT '创建时间',
gmt_modify datetime DEFAULT NULL COMMENT '修改时间',
status char(1) NOT NULL DEFAULT '1' COMMENT '状态: 1 有效 0 无效',
NOT CLUSTER PRIMARY KEY (user_id),
CONSTRAINT unique_uuid UNIQUE(sign_user_id)
) STORAGE(ON "webase", CLUSTERBTR);
</when>
<otherwise>
CREATE TABLE IF NOT EXISTS tb_user (
user_id int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
sign_user_id varchar(64) NOT NULL COMMENT '用户唯一的业务编号',
app_id varchar(64) NOT NULL COMMENT '用户对应的应用编号',
address varchar(64) NOT NULL COMMENT '用户地址',
public_key varchar(256) NOT NULL COMMENT '公钥',
private_key varchar(256) NOT NULL COMMENT '私钥',
description varchar(128) DEFAULT NULL COMMENT '描述',
encrypt_type int NOT NULL COMMENT '加密类型,1:国密;0:ECDSA',
gmt_create datetime DEFAULT NULL COMMENT '创建时间',
gmt_modify datetime DEFAULT NULL COMMENT '修改时间',
status char(1) NOT NULL DEFAULT '1' COMMENT '状态: 1 有效 0 无效',
PRIMARY KEY (user_id),
UNIQUE KEY unique_uuid (sign_user_id)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
</otherwise>
</choose>
使用开关”${isDm8}”适配MYSQL和DMDB;