王子
国产化改造
针对国产化改造的记录
一、改造代码地址
内部源码不公开
二、达梦数据库切换
一、安装配置
1、软件安装
下载地址:https://www.dameng.com/view_61.html
本文以x86 win64 DM8为例
安装完毕后打开DM数据库配置助手创建数据库,设置字符集utf8,去除字符大小写敏感
创建表空间及用户,最好是一个库对应一个用户一个表空间,创建用户时需要指定对应表空间
需要对用户分配DBA操作权限
2、数据表迁移
针对现有项目或框架库需要同步迁移到达梦数据库,本文以mysql5.7为例,打开DM数据迁移工具,注意保持对象名大小写,选择表时全部取出再全选,迁移的表名和字段名就与原数据库保持一致
3、maven引用
<!--连接达梦数据库-->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.1.49</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialect-for-hibernate5.3</artifactId>
<version>8.1.1.49</version>
</dependency>
4、数据库配置
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: dm.jdbc.driver.DmDriver
username: SYSDBA
password: SYSDBA
url: jdbc:dm://wiilead-db:5236/SYSDBA?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
hikari:
minimum-idle: 5
maximum-pool-size: 15
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 900000
connection-timeout: 15000
connection-test-query: SELECT 1
二、遇到问题及解决办法
1、下载安装达梦数据库后选择DM迁移工具访问MYSQL报错
解决办法:
1.选择指定驱动
2.自定义URL
3.URL后需要频截useSSL=false
2、导包失败,不能放在根pom中,建议放在wiilead-common的pom.xml
3、mapper中关键字、表名 在DM中的兼容
达梦数据库中表名、字段名不能带`符号
4、处理工作流兼容DM的部分liquibase和Flowable都要改
5、MySQL库迁移到达梦的过程中,出现列长度超出定义的问题导致中断
MYSQL中使用的是UTF8编码。 在MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。gb18030 字符集,varchar(2) 才可以存一个汉字;UTF-8 字符集,varchar(3) 才可以存一个汉字。该names在MYSQL的长度为2,在迁移过程中,达梦数据库建表的names字段长度也是2,那么就会导致当该字段中文字符超过2个的时候,就会出现无法存下的问题。
例如:alter table "VM_TRAINING_NOTICE" modify "TYPE" VARCHAR(6);
6、导入数据库时,出现数据库记录超长警告,导致数据无法正常导入
提供三种方式:
1.重新建库,把页大小改大
这种方式是在建立数据库实例的时候进行的 修改【页大小】
2.把报错的表的“启用超长记录”打开
这种方式是在有表结构的基础上,将表的【启用超长记录】打开
3.找一下是哪个字符类型的列太长了,改成Text
这种方式是在有表结构的基础上,且可以确认到记录超长字段,设置【字符类型】为 Text
7、使用DmJdbc驱动自带的获取数据库小版本号方法报错问题记录
1.环境说明
数据库版本:DM V8 --03134283890-20220518-160920-10045 Pack6(DM V8 1-2-114)
Dmjdbc驱动版本:2-141版本及之前
2.问题触发的前提条件
1、使用的数据库版本为DM V8 1-2-114及以后的版本(2022年2月及以后)
2、使用的DmJdbc驱动版本为DM V8 1-2-114及以前的版本
3、程序代码中使用了DmJdbc驱动自带的获取小版本号的方法(获取大版本号的方法正常)
以上三个条件全部满足才会出现该问题。
3.报错信息
Java.lang.NumberFormatException:For input string:””
4.原因分析
从报错信息来看,数值格式化时,由于获取到空字符串,导致报错。
相关方法为dm.jdbc.driver.DmdbDatabaseMetaData.do_getDatabaseMinorVersion、getDatabaseMinorVersion,该方法为Dmjdbc驱动自带的获取数据库小版本号的相关方法。通过反编译Dmjdbc驱动包查看相关方法,该方法通过SQL语句到数据库中查询相关版本号信息然后进行处理返回。
通过简单的验证发现在使用DM V8 --03134283890-20220518-160920-10045 Pack6即DM V8 1-2-114版本数据库时,使用2-114版本及之前版本带的DmJdbc驱动中的相关获取小版本的方法获取数据库小版本号信息会出现上面的报错。
具体的原因,应该是由于最新某个版本(2-114)开始数据库版本号信息命名规则发生变化,而对应版本自带的驱动未及时更新调整相关内置方法导致。该问题经过验证在最新DM V8 1-2-128版本的JDBC驱动中已解决。
5.解决办法
方法一、使用DM V8 1-2-114之后的版本驱动,比如03134283904-20220714-165042-20005 该版本(DM V8 1-2-128)。
方法二、更换数据库版本为DM V8 1-2-114之前的版本。
方法三、不使用DmJdbc驱动自带的方法获取数据库小版本号,自己在代码中来实现。
三、宝兰德中间件改造
一、配置修改
1、pom.xml修改
所有模块的打包方式改为war,排除自带的tomcat并且注释掉undertow相关jar,引入javax.servlet;当本地启动时,将undertow放开就可以了
2、gateway改成zuul
gateway模块下的pom.xml引入zuul的jar包
3、gateway的bootstrap.ym配置修改
在gateway模块下的bootstrap.yml中添加
4、gateway-config配置修改
需要修改成zuul支持的方式,将原先的gateway替换掉
二、Gateway代码修改
1、删除或注释掉gateway相关的代码:PasswordDecoderFilter.java,SwaggerHeaderFilter.java,WiileadRequestGlobalFilter.java,HystrixFallbackHandler.java,SwaggerHandler.java
2、新增zuul相关代码:PasswordDecoderZuulFilter.java,ZuulFilterPre.java,ZuulFallBack.java
3、修改启动类WiileadcloudGatewayApplication,增加注解@EnableZuulProxy
三、统一代码改造
在所有的模块下启动类进行改造:继承SpringBootServletInitializer并实现configure方法
四、引入前端代码
1、在gateway的resource目录下新建static目录
2、将前端打包的代码放在static目录下
五、控制台部署
http://127.0.0.1:1900/console/
老王的改造心得 值得用心学习