一、概述
最近实习公司在推进现有项目的国产化替代,需要将原项目所用的Mysql数据库迁移到Kingbase人大金仓国产数据库。在根据网上现有教程JPA整合Kingbase的步骤操作下来遇到若干报错,整理成文记录一下以便后人查阅规避。
由于这篇文章是在踩坑之后过了好久才写的,所以有些问题并没有当时情况的配图,叙述也可能会有不严谨,但要是遇见了同样的问题来回看文章一定可以解决。
二、心得
1.Kingbase 授权文件
在安装完人大金仓的数据库之后,利用官方自带的KStudio数据库开发工具进行数据库操作的时候,包括之后使用JPA配置并连接数据库后,对数据库进行增删改查的时候,偶然会遇见操作不成功报错,在查看kingbase的日志文件(路径在 \data\sys_log 目录下)后会发现有 :
HKT [26568] FATAL: 对不起, 已经有太多的客户
这个报错实际上是由于当前使用的 Kingbase 授权文件使用的开发者过多。
解决办法也很玄学,就是去官网重新下载授权文件并替换,如过还是会出现这个报错那么尝试下载企业版的试用授权文件替换即可。
2.JPA-application.yml配置
这部分直接cv即可,需要注意的地方:
- drivername不要填写错
- url库名填写正确
- username要跟hibernate.default_schema保持一致,因为人大金仓的数据库存储模式是先建立用户再创建模式,用户跟模式关联之后,在数据库目录对应模式下才可以建表存放数据。这两部分的内容要一致若不一致会出问题(这部分还是没有太深入去理解,仅从应用层面来说保持一致不会出问题)
- hibernate方言要改成kingbase对应的方言
- 其余选项按实际要求修改
- 注意数据库密码要填写正确!!!有时候报各种奇怪错误最后都是因为密码填错。
spring:
application:
name:
datasource:
#数据库1 主库
one:
driver-class-name: com.kingbase8.Driver
jdbc-url: jdbc:kingbase8://localhost:54321/库名
username: oa_manager
password: 12345
jpa:
show-sql: true
open-in-view: false
generate-ddl: true # 需要加上这个才能自动生成数据库表
hibernate:
ddl-auto: update
properties:
# hibernate方言:就是对应数据库,在根据对应的数据库进行自动实现sql
hibernate.dialect: org.hibernate.dialect.Kingbase8Dialect
# 自动生成的sql中from对应的表
hibernate.default_schema: oa_manager
# 控制台的sql 进行格式化
hibernate.format_sql: true
# 控制台可以看到JDBC运行时间
hibernate.generate_statistics: true
# 是否显示注释,用以指出什么操作产生的 SQL 语句
hibernate.use_sql_comments: true
3.Kingbase相关依赖包的导入
在安装完人大金仓kingbase数据库之后,在对应安装目录
KESRealPro\V008R006C008B0020\Interface
下的hibernate和jdbc目录中就有jar包,优先使用hibernate-4和kingbase8-8.6.0这两个包,实测在JDK8和JDK17下均可使用。
按照本人习惯在java项目目录中创建Lib目录存放这两个Jar包,然后在pom中添加本地存放目录直接引用本地Jar包即可。
<!--kingbase8.jdbc--> <dependency> <groupId>com.kingbase8.jdbc</groupId> <artifactId>kingbase8</artifactId> <version>8.6.0</version> <scope>system</scope> <systemPath>${pom.basedir}/libs/kingbase8-8.6.0.jar</systemPath> </dependency> <!--hibinate-4--> <dependency> <groupId>hibernate-4.dialect</groupId> <artifactId>hibernate-6.2.dialect</artifactId> <version>6.2</version> <scope>system</scope> <systemPath>${pom.basedir}/libs/hibernate-6.2.dialect.jar</systemPath> </dependency>
4.Mysql数据库迁移Kingbase
在Kingbase安装目录
\KESRealPro\V008R006C008B0020\ClientTools\guitools\KDts\KDTS-WEB\bin
下有startup.bat跟shutdown.bat两个启动项,运行startup后,cmd窗口会短暂出现后消失,接着打开http://localhost:54523/即可打开KDTS数据库迁移工具的web界面,输入默认账号:admin 密码:123456&*登录数据库迁移工具。
在数据库迁移的过程中,目标数据库选择kingbase,数据库版本要选择V8R6而不是V8R6C7,否则在数据迁移的过程中会迁移数据失败。
数据库版本选择(上正确 下错误)
目标数据库版本选择错误迁移失败报错