github地址:个人仓库
本文基于扩展源码的方式进行的集成,官方推荐的方式为:扩展插件包
源码修改
1.1根pom增加postgresql依赖
<postgresql.version>42.5.1</postgresql.version>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
1.2 config模块pom文件增加依赖
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
1.3 以下操作在plugin模块
/plugin/datasource/src/main/resources/META-INF/services 下增加以下数据
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoAggrMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoBetaMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoTagMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigTagsRelationMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.HistoryConfigInfoMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantInfoMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantCapacityMapperByPostgreSql
com.alibaba.nacos.plugin.datasource.impl.postgresql.GroupCapacityMapperByPostgreSql
1.4 增加 postgresql文件夹
com.alibaba.nacos.plugin.datasource.impl 模块下
1.5 增加postgresql常量
com.alibaba.nacos.plugin.datasource.constants.DataSourceConstant.java
public static final String POSTGRESQL = "postgresql";
1.6 根据SPI机制进行代码扩展详细代码请访问github
ConfigInfoAggrMapperByPostgreSql
ConfigInfoBetaMapperByPostgreSql
ConfigInfoMapperByPostgreSql
ConfigInfoTagMapperByPostgreSql
ConfigTagsRelationMapperByPostgreSql
HistoryConfigInfoMapperByPostgreSql
TenantInfoMapperByPostgreSql
TenantCapacityMapperByPostgreSql
GroupCapacityMapperByPostgreSql
2. 编译打包源码
mvn -Prelease-nacos clean package install -Dmaven.test.skip=true
3. 配置文件修改
spring.datasource.platform=postgresql
db.num=1
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos_config?reWriteBatchedInserts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
db.user.0=postgres
db.password.0=123456
db.pool.config.driverClassName=org.postgresql.Driver
4.运行nacos
.\startup.cmd -m standalone
5. 数据结构sql
github地址: postgresql
官网多数据源插件文档
多数据源插件
Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。
注意: 目前多数据源插件处于Beta测试阶段,其API及接口方法定义可能会在后续版本升级而有较大修改,请注意您的插件适用版本。
插件化实现
在原来的Config模块中,所有的SQL操作的执行是通过直接使用JdbcTemplate执行固定SQL语句的形式,使得SQL语句与业务逻辑高度耦合,并且只支持Derby与MySQL两种数据源,原有Config模块架构如下。
现在的多数据源插件通过SPI机制,将SQL操作按照数据表进行抽象出多个Mapper接口,Mapper接口的实现类需要按照不同的数据源编写对应的SQL方言实现; 现在插件默认提供Derby以及MySQL的Mapper实现,可直接使用;而其他的数据源则需要用户使用数据源插件进行加载,其改造后架构图如下。
如何使用
用户查询当前Nacos是否支持所需数据源,Nacos默认提供Derby以及MySQL的实现,若暂未支持可参考下面插件编写者如何开发步骤开发插件自己使用或贡献;
在application.properties配置文件中将spring.datasource.platform修改为对应的数据源名称,并配置数据源相关参数;
然后编译运行则可支持此数据源;
插件编写者如何开发
引入nacos-datasource-plugin依赖
实现com.alibaba.nacos.plugin.datasource.mapper包下数据表对应Mapper接口中的特殊SQL方法,主要是涉及分页等方言差别,可参考com.alibaba.nacos.plugin.datasource.impl下Derby以及MySQL的实现,只需实现对应接口即可。接口与表对应关系如下:
数据库表 | Mapper |
config_info_aggr | ConfigInfoAggrMapper |
config_info_beta | ConfigInfoBetaMapper |
config_info | ConfigInfoMapper |
config_info_tag | ConfigInfoTagMapper |
config_tags_relation | ConfigTagsRelationMapper |
his_config_info | HistoryConfigInfoMapper |
编写SPI配置文件,其名字为com.alibaba.nacos.plugin.datasource.mapper.Mapper,写入实现Mapper接口的类,可参考config模块中Derby与MySQL配置文件。
插件使用者则可以通过依赖此插件,达到实现对应数据源操作的效果
编译运行
如何编译
编译插件之前需要先编译nacos并安装至本地仓库.
git clone git@github.com:alibaba/nacos.git
cd nacos && mvn -B clean package install -Dmaven.test.skip=true
若出现 revision变量无法解析,请更新 maven至最新版本
git clone #{对应数据源插件实现Git地址}
mvn install
建议上传到公司的maven仓库
未来方案
未来的版本更新如下:
[ ] 继续细分SQL,在现有的基础上,减少SQL语句的同时,对动态SQL的实现更加友好;
[ ] 抽离不同数据源之间的差异列表,并通过配置文件或配置类的方式进行差异列表的替换,方便插件编写者编写插件;
其他数据源的实现
待补充