【开发心得】springboot+mybatis对接翰高数据库及mysql数据库迁徙 ...

打印 上一主题 下一主题

主题 831|帖子 831|积分 2493

媒介


  随着S3赛季的开启,信创化之路愈发加紧。国内出现了许多基于社区版mysql或者pgsql的优化版本的国产数据库。本文提到的翰高数据库基于pgsql实现(如存争议,可删除)。
引用某度百科的原文简介:
   瀚高数据库引进了国际上最先进的开源数据库PostgreSQL内核技能,在此PostgreSQL社区版之上做了一系列的研发和优化。瀚高科技是中国最早致力于PostgreSQL数据库商业推广利用的专业化公司,在数据库方面有着丰富的开发、管理和培训履历。瀚高数据平台办理方案既可以为用户节省大量的数据库利用本钱,又可以为用户提供专业化的数据服务,从而团体提高用户IT部分的数据库利用程度。
  资源分享

迁徙工具与可视化客户端分享,见文末。
工程对接(SpringBoot+Mybatis为例)

(1) pom依靠
  1. <!-- https://mvnrepository.com/artifact/com.highgo/HgdbJdbc -->
  2. <dependency>
  3.         <groupId>com.highgo</groupId>
  4.         <artifactId>HgdbJdbc</artifactId>
  5.         <version>6.2.4</version>
  6. </dependency>
复制代码
 (2) 数据库jdbc毗连
  1. # 数据源配置
  2. spring:
  3.     datasource:
  4.         type: com.alibaba.druid.pool.DruidDataSource
  5.         driverClassName: com.highgo.jdbc.Driver
  6.         druid:
  7.             # 主库数据源
  8.             master:
  9.                 url: jdbc:highgo://实际ip:实际端口号/库名(这里相当于名称空间)?currentSchema=约束名(mysql的数据库名),public&stringtype=unspecified&serverTimezone=Asia/Shanghai
  10.                 username: 用户名
  11.                 password: 密码
  12.             # 从库数据源
  13.             slave:
  14.                 # 从数据源开关/默认关闭
  15.                 enabled: false
  16.                 url:
  17.                 username:
  18.                 password:
  19.             # 初始连接数
  20.             initialSize: 5
  21.             # 最小连接池数量
  22.             minIdle: 10
  23.             # 最大连接池数量
  24.             maxActive: 20
  25.             # 配置获取连接等待超时的时间
  26.             maxWait: 60000
  27.             # 配置连接超时时间
  28.             connectTimeout: 30000
  29.             # 配置网络超时时间
  30.             socketTimeout: 60000
  31.             # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  32.             timeBetweenEvictionRunsMillis: 60000
  33.             # 配置一个连接在池中最小生存的时间,单位是毫秒
  34.             minEvictableIdleTimeMillis: 300000
  35.             # 配置一个连接在池中最大生存的时间,单位是毫秒
  36.             maxEvictableIdleTimeMillis: 900000
  37.             # 配置检测连接是否有效
  38.             validationQuery: SELECT 1
  39.             testWhileIdle: false
  40.             testOnBorrow: false
  41.             testOnReturn: false
  42.             webStatFilter:
  43.                 enabled: true
  44.             statViewServlet:
  45.                 enabled: true
  46.                 # 设置白名单,不填则允许所有访问
  47.                 allow:
  48.                 url-pattern: /druid/*
  49.                 # 控制台管理用户名和密码
  50.                 login-username: 控制台用户名
  51.                 login-password: 密码
  52.             filter:
  53.                 stat:
  54.                     enabled: true
  55.                     # 慢SQL记录
  56.                     log-slow-sql: true
  57.                     slow-sql-millis: 1000
  58.                     merge-sql: true
  59.                 wall:
  60.                     config:
  61.                         multi-statement-allow: true
复制代码
数据库迁徙

(1) 从mysql 迁徙
工具:  migration-4.1.4-2024-08-09(翰高提供,侵删)
解压zip后,找到migration/bin 点击start.bat或者对应cpu位数的exe步调。

主界面
新建组 
在组中新建翰高和mysql的毗连(其他也可以)

新建迁徙任务

选择源和目标

 选择范围,下一步下一步即可。
迁徙过程中,工具给我们做了许多兼容。如果你的翰高数据库开启了mysql模式,而且执行这个工具的话,他会自动创建sequence,兼容mysql自增id的实现。
可视化工具毗连数据库

1. 企业版安全版

这个版本好像默认开启了SM3(国密3)的认证,因为我对接的版本是dba提供的,具体没有看到配置。
如果开启国密版本的认证了,那么navicat, sqlyog等工具默认是不支持的。
会报错: authentication method 13 not supported
网上听说有sm3的dll插件,可以给到navicat,至少我没找到免费的下载毗连。
这种情况,请利用dbeaver或者datagrip,这俩工具是支持自定义jar驱动的。
higo驱动中有sm3的痕迹,具体源码没有debug

那么就偶尔机了
 第一种方式 dbeaver 自定义驱动毗连翰高数据库。
(1) 打开dbeaver,数据库-驱动管理器

(2) 驱动管理器-新建

(3) 填写毗连模板
毗连瀚高数据库:highgo
类名:com.highgo.jdbc.Driver
URL :jdbc:highgo://{host}[:{port}]/[{database}]

下载而且加载驱动
https://mavenlibs.com/jar/file/com.highgo/HgdbJdbc

创建完之后,其他和新建正常的sql毗连没有多大区别。
 
毗连成功后,dbeaver的结构,会在外部库名(可以理解为名称空间)的基础上,另有一个"schema"名称(相当于mysql的数据库名称),然后才是表名,对于熟悉oracle或者pgsql的小同伴可能友好,但对于利用mysql和其他数据库的小同伴有点别扭。
 

第二种方式,直接利用翰高的 hgdbdeveloper-6.1.0-2024-04-22.zip(翰高提供,侵删)
新建毗连(注意,这里勾选是否为安全版,应该和利用利用sm3加密链接库有关系)

毗连后的截图,其他和利用dbever一类的数据库类似。

2. 未开启国密版本。

看成pgsql直接毗连即可,有其他博客表明,可以用navicat一类的工具直接毗连。

Mysql函数或语法兼容

函数直接创建出来就好
1. ifnull
  1. create function ifnull(value anyelement, null_value anyelement) RETURNS anyelement AS
  2. $$
  3. BEGIN
  4.   if value is null then return null_value;
  5.   else return value;
  6.   end if;
  7. END;
  8. $$
  9. LANGUAGE plpgsql;
复制代码
2. find_in_set
  1. CREATE OR REPLACE FUNCTION find_in_set(value text, col_name text)
  2. RETURNS boolean AS $$
  3. BEGIN
  4.   RETURN value = ANY(string_to_array(col_name, ','));
  5. END;
  6. $$ LANGUAGE plpgsql;
复制代码
语法兼容

(1)pgsql有较强的语法验证:
operator does not exist: character = integer 办理方案,根据对应的报错提示去找字符和数字等的转换支持(mysql对比比较不敏感)
检察当前采用的模式:
alter system set  compatible_db = 'mysql';
select pg_reload_conf();
(2) 自增id
举例子:
创建序列
CREATE SEQUENCE my_table_id_seq;
使表关联对应序列
CREATE TABLE my_table (
    id INTEGER PRIMARY KEY DEFAULT NEXTVAL('my_table_id_seq'),
    name VARCHAR(100),
    data TEXT
);

可选,修改序列起点。(一般不直接修改,如果多次执行迁徙工具的迁徙,sequence并没有触发自增,最好是删除sequence重建)。
alter sequence s_seq restart with 2

(3) mybatis字段兼容
PSQLException: ERROR: could not determine data type of parameter $1
like concat('%', #{deptName}::text, '%')


资源链接(免责侵删): 
migration-4.1.......等2个文件官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供migration-4.1.......等2个文件最新版正式版官方版绿色版下载,migration-4.1.......等2个文件安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装
https://www.123865.com/s/07O0Vv-2V47A?提取码:mT26

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表