写在前面:RuoYi框架中nacos(2.5.1) + SeataServer(2.5.0) 国产数据库人大金仓改造支持。
Maven 安装人大金仓数据库驱动到私服
- 与人大金仓人员联系获取数据库对应版本的数据库驱动
- maven 命令把 jar 包构建成私服坐标
<dependency>
<groupId>com.kingbase8</groupId>
<artifactId>kingbase8</artifactId>
<version>${kingbase8.version}</version>
</dependency>
SeataServer 人大金仓支持
SeataServer官网中没有明确说明对人大金仓数据库的支持,但是在某些博客中找到从2.3版本后开始支持KingBase

- 修改pom增加人大金仓数据库驱动依赖
- 修改application.properties文件,修改代码如下
# 数据库类型
store.db.dbType=kingbase
# JDBC 驱动
store.db.driverClassName=com.kingbase8.Driver
# 数据库连接地址
# store.db.url=jdbc:kingbase8://xxxx:xx/gzszh-test?currentSchema=gqszh-seata,SYS_CATALOG
Nacos 人大金仓支持
官网仍然没有没确指定nacos 对人大金仓数据库方面的支持,而且这里有点小坑。改造方案如下,在官网上找到数据库支持拓展插件
nacos插件地址

-
git 下载源代码,切换到v2-devlop分支,可以看到父级pom中对应的事2.5.0~2.6版本,然后maven编译,编译好的 jar包nacos-kingbase-datasource-plugin-ext-1.0.0-SNAPSHOT.jar。

-
把编译好的jar 复制到nacos 项目中修改为如下的名字(修改名字非必须),在 pom中引入该jar

-
启动nacos 服务报错,找不到config_info_gray这个表,而且插件中的nacos-kingbase.sql 中也没有这个表(踩坑)

-
跟踪一下源代码,发现已经加载到插件配置的kingbase了,无疑插件是不是版本不对?

继续跟踪发现Mapper_SPI(Nacos插件机制)中发现只有这8张表被扫描到了,或者说只有这8个表对应的Mapper被扫描到了,少了一个Mapper,就是报错的哪个。

-
切换到默认的devlop分支,去找找最新的分支上是否有这个Mapper,devlop分支支持最新nacos 版本 V3,这里有对应实现类中的Mapper的支持,如下图所示,但是初始化脚本中仍然没有这个表的Sql 语句(踩坑),我把语句也贴在下面了。

-- config_info_gray ddl
CREATE TABLE "nacos_config"."config_info_gray" (
"id" uint8 NOT NULL,
"data_id" varchar(255) NOT NULL,
"group_id" varchar(128) NOT NULL,
"content" longtext NOT NULL,
"md5" varchar(32),
"src_user" text,
"src_ip" varchar(100),
"gmt_create" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
"gmt_modified" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
"app_name" varchar(128),
"tenant_id" varchar(128) DEFAULT ''::varchar,
"gray_name" varchar(128) NOT NULL,
"gray_rule" text NOT NULL,
"encrypted_data_key" varchar(256) NOT NULL DEFAULT ''::varchar,
CONSTRAINT "PRIMARY_idx3" PRIMARY KEY ("id"));
COMMENT ON TABLE "nacos_config"."config_info_gray" IS 'config_info_gray';
CREATE UNIQUE INDEX "uk_configinfogray_datagrouptenantgray" ON "nacos_config"."config_info_gray" USING btree ("data_id" COLLATE "pg_catalog"."ci_x_icu" "pg_catalog"."text_ops" ASC NULLS FIRST,"group_id" COLLATE "pg_catalog"."ci_x_icu" "pg_catalog"."text_ops" ASC NULLS FIRST,"tenant_id" COLLATE "pg_catalog"."ci_x_icu" "pg_catalog"."text_ops" ASC NULLS FIRST,"gray_name" COLLATE "pg_catalog"."ci_x_icu" "pg_catalog"."text_ops" ASC NULLS FIRST);
COMMENT ON COLUMN "nacos_config"."config_info_gray"."id" IS 'id';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."data_id" IS 'data_id';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."group_id" IS 'group_id';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."content" IS 'content';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."md5" IS 'md5';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."src_user" IS 'src_user';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."src_ip" IS 'src_ip';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."gmt_create" IS 'gmt_create';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."gmt_modified" IS 'gmt_modified';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."app_name" IS 'app_name';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."gray_name" IS 'gray_name';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."gray_rule" IS 'gray_rule';
COMMENT ON COLUMN "nacos_config"."config_info_gray"."encrypted_data_key" IS 'encrypted_data_key';
;
- 把ConfigInfoGrayMapperByKingbase.java复制到刚才的v2_devlop分支下,在META-INF中增加如下代码,这是SpringBoot加载Starter中的写法,可以把这个类扫描为Spring的一个Bean

- 重新打包编译,就可以正常启动了!

1631

被折叠的 条评论
为什么被折叠?



