SpringBoot从0-1集成KingBase数据库

✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

👉 点击直达→ 盹猫猫的个人小站 👈

🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

[🐎 前言](#🐎 前言)

[🐴 什么是kingbase数据库?](#🐴 什么是kingbase数据库?)

[📚 环境准备](#📚 环境准备)

[⬇️ 在安装KingBase数据库](#⬇️ 在安装KingBase数据库)

[🌳 Pom依赖](#🌳 Pom依赖)

✔代码步骤

[⚙️ application.yml](#⚙️ application.yml)

[❓ 疑问解答](#❓ 疑问解答)

[❓1.容器启动时会报错 :initdb: error: case-insensitive should only be enabled in oracle mode?](#❓1.容器启动时会报错 :initdb: error: case-insensitive should only be enabled in oracle mode?)

❓2.如何导入SQL文件到数据库?

[⭕ 总结](#⭕ 总结)


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

**SpringBoot从0-1集成KingBase数据库**

❤博主广交技术好友,喜欢文章的可以关注一下❤

🐎 前言

最近在进行SpringBoot程序人大金仓数据库的国产化数据库适配操作,需要从Postgres数据库转移数据到国产KingBase数据库,在这期间也是遇到了很多问题,在这里对整个数据库的部署和集成过程进行记录。

🐴 什么是kingbase数据库?

Kingbase 数据库通常指金仓数据库管理系统 KingbaseES(KES),是由电科金仓(中国电子科技集团控股)研发的国产自主可控企业级通用融合数据库,核心面向事务处理与数据分析,支持多模数据与异构语法兼容,是信创与国产化替代中的主流选择。

📚 环境准备

⬇️ 在安装KingBase数据库

KingBase官网提供了多种安装方式,包括使用Windows、Linux(包含国产化芯片架构的Linux)的安装包进行安装模式,Docker镜像部署方式。但相对来说安装模式的安装包有点大,所以这边使用官方的Docker镜像进行安装。

选择合适的CPU架构镜像进行下载,这里使用X64的Linux系统镜像。这里的下载的安装包文件为

kdb_x86_64_V008R006C009B0014.tar 。(不同版本下载的名称也不同)

使用docker命令导入镜像:

bash 复制代码
docker -i kdb_x86_64_V008R006C009B0014.tar 

使用docker images命令查看一下导入的镜像,确认导入成功:

然后进行数据库的启动,在此之前我们需要创建一下数据库数据持久化的目录,并配置755权限,命令如下:

bash 复制代码
#创建持久化的数据目录
mkdir -p /mnt/data

#配置读写权限
chmod -R 755 /mnt/data

然后进行数据库的启动,使用docker run命令进行数据库容器的部署和启动,命令如下:

bash 复制代码
docker run \
  -tid \                          # 后台运行+分配伪终端+保持STDIN打开
  --privileged \                  # 赋予容器特权模式(访问主机设备等)
  -p 4321:54321 \                 # 端口映射:主机4321 → 容器54321
  -v /mnt/data:/home/kingbase/userdata \  # 数据卷挂载:主机目录 → 容器数据目录
  -e NEED_START=yes \             # 环境变量:启动后自动启动数据库
  -e DB_USER=kingbase \           # 环境变量:数据库用户名
  -e DB_PASSWORD=123456 \         # 环境变量:数据库密码
  -e DB_MODE=pg \                 # 环境变量:数据库运行模式(PostgreSQL兼容模式)
  -e ENABLE_CI=no \               # 环境变量:关闭大小写敏感
  --name kingbase \               # 容器名称:kingbase
  kingbase_v008r006c009b0014_single_x86:v1 \  # 镜像名称+版本
  /usr/sbin/init                  # 容器启动后执行的初始化命令

KingBase可以根据需要选择多种数据库模式,以适应不同的数据库数据迁移,这里使用的是Postgres数据库模式。

然后使用docker ps命令确认我们的数据库正在运行:

并且日志为正常的启动日志。

🌳 Pom依赖

XML 复制代码
<dependency>
   <groupId>cn.com.kingbase</groupId>
   <artifactId>kingbase8</artifactId>
   <version>9.0.0</version>
   <scope>compile</scope>
 </dependency>

在SpringBoot的Pom文件中添加kingbase官方的驱动依赖(大部分的数据库都会有自己的驱动程序依赖)。

✔代码步骤

⚙️ application.yml

XML 复制代码
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:kingbase8://127.0.0.1:4321/db_slhzpj?currentSchema=public&database_compatibility=PG
    # 核心修改:金仓专属驱动类名
    driver-class-name: com.kingbase8.Driver
    username: kingbase
    password: 123456

与其它数据库类似的配置,其中驱动driver-class-name修改为com.kingbase8.Driver ,database_compatibility(数据库兼容模式)设置PG数据库,使用kingbase8的协议头的URL连接,然后启动SpringBoot程序即可。至于是使用Mybatis或者Jpa,Kingbase都是可以进行相关操作的。

❓ 疑问解答

❓1.容器启动时会报错 :initdb: error: case-insensitive should only be enabled in oracle mode?

官方文档默认的是使用oracle数据库模式,是可以开启密码小写敏感的,但其它数据库模式时可以将ENABLE_CI=no 变量设置为null以关闭大小写敏感,否则是启动不了数据库的,日志会报下面这个异常:

bash 复制代码
export KINGBASE_USER=kingbase
initdb: error: case-insensitive should only be enabled in oracle mode.

❓2.如何导入SQL文件到数据库?

可以将要导入的SQL文件放在容器共享的文件目录内,通过进入容器终端,使用以下命令进行SQL文件的导入操作:

java 复制代码
[root@39ffc4597c02 kingbase]# ksql
Type "help" for help.

kingbase=# \l 
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 db_slhzpj | kingbase | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 kingbase  | kingbase | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 security  | kingbase | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | kingbase | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/kingbase          +
           |          |          |             |             | kingbase=CTc/kingbase
 template1 | kingbase | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/kingbase          +
           |          |          |             |             | kingbase=CTc/kingbase
 test      | kingbase | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(6 rows)

kingbase=# \c db_slhzpj
You are now connected to database "db_slhzpj" as userName "kingbase".
db_slhzpj=# \i /home/kingbase/userdata/sql/test.sql

使用ksq 命令连接到本地的数据库进入交互式的终端,使用**\l** 命令查看已有的数据库,使用**\c db_slhzpj** 命令移动到我们需要的数据库(db_slhzpj ),\i /home/kingbase/userdata/sql/test.sql执行sql文件进行数据的导入。

⭕ 总结

SpringBoot的适配国产化数据库的关键主要是其数据库迁移时使用的命令与其它数据库不太相同,但数据库部署完成和导入数据后,整体的集成过程与其它主流数据库没有任何区别,同样需要集成驱动依赖以及修改配置文件。

上面就是所有文章内容了,如果内容对你有帮助,麻烦留一个赞👍和收藏⭐支持一下!


如果你对区块链 内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

相关推荐
程序员敲代码吗2 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
未来的旋律~2 小时前
sqlilabs注入靶场搭建与sql语句
数据库·sql
一个天蝎座 白勺 程序猿3 小时前
KingbaseES查询逻辑优化深度解析:从子查询到语义优化的全链路实践
开发语言·数据库·kingbasees·金仓数据库
我真的是大笨蛋3 小时前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
山茶花.4 小时前
SQL注入总结
数据库·sql·oracle
m0_736919104 小时前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
m0_748229994 小时前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
阿蒙Amon5 小时前
C#每日面试题-Thread.Sleep和Task.Delay的区别
java·数据库·c#
沉舟侧畔千帆过_5 小时前
一个DBA的真心话:搞定Oracle+PG双库,我就靠这招
数据库·oracle·dba