当前位置: 首页 > news >正文

Nacos多数据源插件

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的实现,若暂未支持可参考下面插件编写者如何开发步骤开发插件自己使用或贡献;
  2. application.properties配置文件中将spring.datasource.platform修改为对应的数据源名称,并配置数据源相关参数;
  3. 然后编译运行则可支持此数据源;

插件编写者如何开发

  1. 引入nacos-datasource-plugin依赖
  2. 实现com.alibaba.nacos.plugin.datasource.mapper包下数据表对应Mapper接口中的特殊SQL方法,主要是涉及分页等方言差别,可参考com.alibaba.nacos.plugin.datasource.impl下Derby以及MySQL的实现,只需实现对应接口即可。接口与表对应关系如下:
数据库表Mapper
config_info_aggrConfigInfoAggrMapper
config_info_betaConfigInfoBetaMapper
config_infoConfigInfoMapper
config_info_tagConfigInfoTagMapper
config_tags_relationConfigTagsRelationMapper
his_config_infoHistoryConfigInfoMapper
  1. 编写SPI配置文件,其名字为com.alibaba.nacos.plugin.datasource.mapper.Mapper,写入实现Mapper接口的类,可参考config模块中Derby与MySQL配置文件。
  2. 插件使用者则可以通过依赖此插件,达到实现对应数据源操作的效果
  3. 编译运行

如何编译

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

  1. git clone git@github.com:alibaba/nacos.git
  2. cd nacos && mvn -B clean package install -Dmaven.test.skip=true

若出现revision变量无法解析,请更新maven至最新版本

  1. git clone #{对应数据源插件实现Git地址}
  2. mvn install

建议上传到公司的maven仓库

未来方案

未来的版本更新如下:

  •  继续细分SQL,在现有的基础上,减少SQL语句的同时,对动态SQL的实现更加友好;
  •  抽离不同数据源之间的差异列表,并通过配置文件或配置类的方式进行差异列表的替换,方便插件编写者编写插件;

 

原文出自:nacos官网

相关文章:

  • Windows 基于 VMware 虚拟机安装银河麒麟高级服务器操作系统
  • 添加新公司代码的配置步骤-Part2
  • 禁奥义·SQL秘籍
  • Java架构师系统架构设计服务拆分应用
  • 汽车软件大时代,如何提升软件工程创新力?
  • LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍
  • 百度推送收录工具-免费的各大搜索引擎推送工具
  • 软件工程-(可行性分析、需求分析)
  • 3D模型材质编辑
  • 轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)
  • Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)
  • shell命令学习(1)——(待完善)
  • matplot函数调整子图大小测试
  • 提升Python项目整洁度:深入使用 import-linter
  • 【Jmeter】JSON Extractor变量包含转义字符,使用Beanshell脚本来消除
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Computed property XXX was assigned to but it has no setter
  • Java 内存分配及垃圾回收机制初探
  • JSDuck 与 AngularJS 融合技巧
  • Meteor的表单提交:Form
  • Zsh 开发指南(第十四篇 文件读写)
  • 关于Java中分层中遇到的一些问题
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 技术胖1-4季视频复习— (看视频笔记)
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 如何合理的规划jvm性能调优
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用docker-compose进行多节点部署
  • 数组的操作
  • 我建了一个叫Hello World的项目
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 学习笔记:对象,原型和继承(1)
  • 在Docker Swarm上部署Apache Storm:第1部分
  • python最赚钱的4个方向,你最心动的是哪个?
  • raise 与 raise ... from 的区别
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​linux启动进程的方式
  • #AngularJS#$sce.trustAsResourceUrl
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #在 README.md 中生成项目目录结构
  • (day6) 319. 灯泡开关
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (function(){})()的分步解析
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (蓝桥杯每日一题)love
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)shell调试方法
  • (转)Windows2003安全设置/维护
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福