Nacos2.2.3适配KingBase[人大金仓]数据库
下载源码:
https://github.com/alibaba/nacos/releases/tag/2.2.3
添加依赖:
- 根pom添加kingbase依赖
<!-- KingBase Connector -->
<dependency>
<groupId>cn.com.kingbase</groupId>
<artifactId>kingbase8</artifactId>
<version>${KingBase.version}</version>
</dependency>
|
版本号根据实际项目情况来定
- config模块pom添加依赖
<!-- KingBase Connector -->
<dependency>
<groupId>cn.com.kingbase</groupId>
<artifactId>kingbase8</artifactId>
</dependency>
|
- plugin模块
/plugin/datasource/src/main/resources/META-INF/services 下增加以下数据
com.alibaba.nacos.plugin.datasource.impl.kingbase.ConfigInfoAggrMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.ConfigInfoBetaMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.ConfigInfoMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.ConfigInfoTagMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.ConfigTagsRelationMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.GroupCapacityMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.HistoryConfigInfoMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.TenantCapacityMapperByKingBase com.alibaba.nacos.plugin.datasource.impl.kingbase.TenantInfoMapperByKingBase |
- plugin增加 kingbase文件夹
com.alibaba.nacos.plugin.datasource.impl 模块下
- plugin增加kingbase常量
修改文件:com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant.java
public static final String KINGBASE = "kingbase8"; |
- 根据SPI机制进行代码扩展,此处9个文件从mysql文件夹下已有的实现类中copy重命名即可
ConfigInfoAggrMapperByKingBase ConfigInfoBetaMapperByKingBase ConfigInfoMapperByKingBase ConfigInfoTagMapperByKingBase ConfigTagsRelationMapperByKingBase GroupCapacityMapperByKingBase HistoryConfigInfoMapperByKingBase TenantCapacityMapperByKingBase TenantInfoMapperByKingBase |
编译打包源码
# mvn Failed during checkstyle execution: There are errors reported by Checkstyle # 打包发布时注意指定profile的配置,即-Prelease-nacos mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U -Dcheckstyle.skip |
问题:Cannot access mirror (https://maven.aliyun.com/nexus/content/groups/public) in offline mode and the artifact org.springframework.boot:spring-boot-maven-plugin:pom:2.6.14 has not been downloaded from it before.
解决:idea中maven项目下载依赖cannot resolve的问题

最终结果:
配置文件修改
spring.sql.init.platform=kingbase8 spring.datasource.platform=kingbase8 db.num=1 db.url.0=jdbc:kingbase8://192.168.1.40:54321/nacos?currentSchema=public db.user=kingbase db.password=123456 db.pool.config.driverClassName=com.kingbase8.Driver |
运行nacos
jar包位置,生成的jar包在nacos\distribution\target目录下
.\startup.cmd -m standalone |

访问:http://localhost:8848/nacos nacos/nacos

运行调试
console: com.alibaba.nacos.Nacos
VM options: -Dnacos.standalone=true 单击版本
异常登记
情况说明:本人使用KDTS迁移工具同步到kingbase库当中,部分表字段类型调整,自增调整为seq,还有时间问题调整等
kingbase错误duplicate key value violates unique constraint 解决方案
SELECT setval('config_info_id_seq', (SELECT MAX(id) FROM "public"."config_info_id_seq")+1)
# 原因:新建自增序列sequence时都是从1开始,数据迁移场景中实际需要考虑serial列历史数据自增数,执行以上命令即可 |
修改nacos中管理的某个配置文件并保存时报:
caused: PreparedStatementCallback; ERROR: duplicate key value violates unique constraint "uk_configinfo_datagrouptenant" Detail: Key (data_id, group_id, tenant_id)=(liying.yaml, DEFAULT_GROUP, ) already exists.; nested exception is com.kingbase8.util.KSQLException: ERROR: duplicate key value violates unique constraint "uk_configinfo_datagrouptenant" Detail: Key (data_id, group_id, tenant_id)=(liying.yaml, DEFAULT_GROUP, ) already exists.;caused: ERROR: duplicate key value violates unique constraint "uk_configinfo_datagrouptenant" Detail: Key (data_id, group_id, tenant_id)=(liying.yaml, DEFAULT_GROUP, ) already exists.;
分析原因:发现kingbase的driver在唯一键约束重复异常时没有报DuplicateKeyException,而是直接抛出了违反数据完整性异常org.springframework.dao.DataIntegrityViolationException,原因是kingbase的重复key异常code与spring-data约定的异常码不一致,约定的是1062而kingbase报的是23505。


解决办法:经过读其他位置的代码,考量在配置修改时,直接捕获这个异常决定配置是更新or插入,是可以的。
修改代码如下:
#文件路径:src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalConfigInfoPersistServiceImpl.java:177行
# DuplicateKeyException 替换为 DataIntegrityViolationException
} catch (DataIntegrityViolationException ive) { // Unique constraint conflict |
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐






所有评论(0)