提供Spring Cloud Alibaba微服务注册与配置中心Nacos的多数据库适配支持的开源项目,目前计划支持MySQL、PostgreSQL、Oracle、达梦、人大金仓等。
当前项目基于Nacos2.1.0版本进行适配,目前已实现适配Oracle11g(高版本应该也可以)、PostgreSQL、达梦数据库。
从Nacos2.2.0版本开始,Nacos提供了底层存储的数据库扩展插件,开发者可以自己定义插件,实现底层数据库的适配对接,新版本的适配参考个人另外的仓库地址:
https://github.com/wuchubuzai2018/nacos-datasource-extend-plugins
适配版本 | 适配数据库 | 进展 | 测试范围1 | 测试范围2 |
---|---|---|---|---|
Nacos2.1.0 | Oracle | 本地环境简单测试通过 | 单机环境 | 3节点集群环境 |
Nacos2.1.0 | PostgreSQL | 本地环境简单测试通过 | 单机环境 | 3节点集群环境 |
Nacos2.1.0 | 达梦 | 本地环境简单测试通过 | 单机环境 | 3节点集群环境 |
Nacos2.1.0 | 人大金仓 | 待开始尝试 | ||
Nacos2.1.0 | DB2 | 待开始尝试 |
如在当前使用个人的这个版本中,出现了问题,请及时提交ISSUE,一起共建,一起成长。
方案一开发文档说明(文档中提供测试包):Nacos支持适配多种数据库方言实现说明
根目录:
方案一实现代码:
nacos210:适配Nacos2.1.0版本代码(目前已将数据源代码进行提交) nacos143:暂未适配
百度网盘打包地址:链接: https://pan.baidu.com/s/12RlnLJid9VWZR7DWvsANSg 提取码: uwgd
mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true -Drat.skip=true clean install -U
安装后启动即可,安装前根据实际情况,修改application.properties文件中的数据库地址,以及导入如下对应的数据库数据库脚本文件,目前Oracle11g脚本(Oracle 19c应该也可以用)采用触发器的方式设置自增主键。
nacos210/distribution/conf/nacos-oracle.sql
nacos210/distribution/conf/nacos-pg.sql
nacos210/distribution/conf/nacos-mysql.sql
nacos210/distribution/conf/nacos-dameng.sql
该种方案希望尽量不影响原有的SQL业务逻辑前提下进行实现。目前基于Nacos2.1版本,当前该种方案,在本地开发环境,已简单的适配核心的PersistService的处理,支持MySQL、Oracle、PostgreSQL、达梦。部分功能未测试,对于服务注册与配置等基础功能可以实现正常的维护操作。
核心类图如下所示:
最近代码梳理好后,会上传到仓库。
该种方案计划,希望采用容易扩展的插件或解耦的方式,将不同的业务SQL抽取到不同的表数据操作类中,同时并基于这些表数据,提供门面类对外统一暴露SPI接口的方式,同时在原有功能中,采用委派模式动态选择具体的数据库实现类型。
核心类图如下所示:
目前该种方案预计耗时时间长,但是个人觉得扩展性和解耦来说,比较合适。
当前发现的需要视频的多数据源数据库的适配改动,核心的改造点为:
1、不同数据库的分页SQL的适配
2、不同数据库的主键自增问题适配
3、不同数据库的默认tenant_id为空查询的适配
4、不同数据库的user表boolean的适配处理
5、不同数据库的大小写问题
社区Oracle实现资料:
通过javaagent方式:https://github.com/wuwen5/ojdbc-mysql2oracle
基于 Spring Data JPA :https://github.com/alibaba/nacos/tree/feature_multiple_datasource_support
通过javaagent方式:https://github.com/siaron/mysql2postgresql-jdbc-agent
社区PostgreSQL实现资料:
https://blog.csdn.net/dph5199278/article/details/124675548
https://github.com/dph5199278/nacos/releases
开源之夏Nacos 多数据源插件化建设:
https://summer-ospp.ac.cn/#/org/projectlist?nameCode=nacos
https://summer-ospp.ac.cn/#/preview/1542
网友博客:
https://blog.csdn.net/qq_24101357/article/details/123415776
学习阿里巴巴的Nacos对于Java开发者来说是很有意义的,目前社区的活跃度也是比较高,目前个人为Nacos提交过6个Pull Request。
当前自己的Nacos贡献记录:https://github.com/alibaba/nacos/commits?author=wuchubuzai2018
个人能力有限,感兴趣的小伙伴可以一起参与项目的开发与贡献,提出ISSUE一起解决。