Nacos 2.2.0支持postgresql数据库

github地址:个人仓库

本文基于扩展源码的方式进行的集成,官方推荐的方式为:扩展插件包

  1. 源码修改

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实现,可直接使用;而其他的数据源则需要用户使用数据源插件进行加载,其改造后架构图如下。

如何使用


  1. 用户查询当前Nacos是否支持所需数据源,Nacos默认提供Derby以及MySQL的实现,若暂未支持可参考下面插件编写者如何开发步骤开发插件自己使用或贡献;

  1. application.properties配置文件中将spring.datasource.platform修改为对应的数据源名称,并配置数据源相关参数;

  1. 然后编译运行则可支持此数据源;

插件编写者如何开发


  1. 引入nacos-datasource-plugin依赖

  1. 实现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

  1. 编写SPI配置文件,其名字为com.alibaba.nacos.plugin.datasource.mapper.Mapper,写入实现Mapper接口的类,可参考config模块中Derby与MySQL配置文件。

  1. 插件使用者则可以通过依赖此插件,达到实现对应数据源操作的效果

  1. 编译运行

如何编译


编译插件之前需要先编译nacos并安装至本地仓库.

  1. git clone git@github.com:alibaba/nacos.git

  1. cd nacos && mvn -B clean package install -Dmaven.test.skip=true

若出现 revision变量无法解析,请更新 maven至最新版本
  1. git clone #{对应数据源插件实现Git地址}

  1. mvn install

建议上传到公司的maven仓库

未来方案


未来的版本更新如下:

  • [ ] 继续细分SQL,在现有的基础上,减少SQL语句的同时,对动态SQL的实现更加友好;

  • [ ] 抽离不同数据源之间的差异列表,并通过配置文件或配置类的方式进行差异列表的替换,方便插件编写者编写插件;

其他数据源的实现


待补充

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值