当前位置: 首页 > 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官网

相关文章:

Nacos多数据源插件

Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 注意:…...

【Java基础篇 | 面向对象】—— 聊聊什么是接口(上篇)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得,欢迎大家在评论区交流讨论💌 关于接口的简单的介绍…...

golang实现函数yamlToStruct(infile,outFile)

问: golang实现函数yamlToStruct(infile,outFile),将yaml文件格式化成golang的结构体 gpt: 要实现一个将YAML文件格式化成Golang结构体的函数,你可以使用 yaml 和 reflect 包来处理。首先,你需要使用 yaml.Unmarshal 函数将YAML文件解析为一…...

产品成本收集器流程演示

感谢大佬的文章,我只是一个翻译搬运工,原文地址:产品成本收集器 概述 SAP 令人兴奋的部分之一是它在不同操作模块之间的集成程度。使用产品成本收集器来跟踪生产就是一个很好的例子。在本博客中,我计划遵循产品成本收集器流程&a…...

【微服务】springboot整合quartz使用详解

目录 一、前言 二、quartz介绍 2.1 quartz概述 2.2 quartz优缺点 2.3 quartz核心概念 2.3.1 Scheduler 2.3.2 Trigger 2.3.3 Job 2.3.4 JobDetail 2.4 Quartz作业存储类型 2.5 适用场景 三、Cron表达式 3.1 Cron表达式语法 3.2 Cron表达式各元素说明 3.3 Cron表达…...

Electron+Ts+Vue+Vite桌面应用系列:TypeScript常用时间处理工具

文章目录 1️⃣ 时间处理工具1.1 格式化时间1.2 把时间戳改成日期格式1.3 Day.js 工具类使用1.4 date-fns 工具类使用 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134712978 ElectronTsVueVite桌面应用…...

记录 | centos源码编译bazel

tensorflow的源码编译依赖于 bazel 这里进行 bazel 的源码编译 1、安装依赖 sudo yum install -y java-11-openjdk sudo yum install -y java-11-openjdk-devel sudo yum install -y protobuf-compiler zip unzip2、知悉要安装的 bazel 的版本 务必安装受支持的 Bazel 版本…...

常见的Bean工厂后置处理器

此代码在jdk11上测试通过&#xff0c;SpringBoot版本为2.7.14 1.上代码 导入坐标 <dependencies><!-- spring数据坐标 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</art…...

代码随想录算法训练营第四十二天| 416 分割等和子集

目录 416 分割等和子集 416 分割等和子集 class Solution { public:const int N 210;bool canPartition(vector<int>& nums) {vector<int>f(N);int sum 0;for(auto num : nums)sum num;if(sum % 2 1)return false;//如果int target sum / 2;for(int i …...

memmove 和 memcpy的区别

函数原型及作用 memcpy 和 memmove 都是C语言中的库函数&#xff0c;在头文件string.h中&#xff0c;作用是拷贝一定长度的内存的内容&#xff0c;原型分别如下&#xff1a; void* memcpy(void *dst, const void *src, size_t count); void* memmove(void *dst, const void *…...

C实现的双向链表队列

如下代码所示&#xff0c;一个头文件实现的双向链表&#xff0c;用c代码实现&#xff1a; #ifndef _LINUX_LIST_H #define _LINUX_LIST_H#include "stddef.h" #include "poison.h"#ifndef ARCH_HAS_PREFETCH #define ARCH_HAS_PREFETCH static inline voi…...

自适应中值滤波器的python代码实现-----冈萨雷斯数字图像处理

基本原理&#xff1a; 自适应中值滤波器是一种图像处理技术&#xff0c;用于去除图像中的噪声。其原理是根据像素周围邻域内像素值的特性&#xff0c;动态地选择滤波器的大小和中值滤波的程度。 **邻域选择&#xff1a;**对于每个像素点&#xff0c;选取一个窗口或者邻域&…...

Python作业答疑_6.22~6.25

一、Python 一班 1. 基数分割列表 1.1 问题描述 给定一无序数列&#xff0c;把数列的第一个数字当成基数&#xff0c;让数列中基数小的数字排在数列前面&#xff0c;比基数大的数字排在数列的后面。 1.2 问题示例 如数列&#xff1a;num[4,1,8,3,9,2,10,7]。基数为 4&…...

Uber Go 语言编码规范

uber-go/guide 的中文翻译 English 文档链接 Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司&#xff0c;也是 Go 语言的早期 adopter。其开源了很多 golang 项目&#xff0c;诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 G…...

UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大内核ConvNet

摘要 https://arxiv.org/abs/2311.15599 大核卷积神经网络(ConvNets)最近受到了广泛的研究关注,但存在两个未解决的关键问题需要进一步研究。(1)现有大核ConvNets的架构在很大程度上遵循传统ConvNets或Transformers的设计原则,而大核ConvNets的架构设计仍未得到充分解决。(2…...

Http协议与Tomcat

HTTP协议 HTTP协议&#xff08;HyperText Transfer Protocol&#xff09;即超文本传输协议 &#xff0c;是TCP/IC网络体系结构应用层的一个客户端-服务端协议&#xff0c;是所有客户端&#xff0c;服务端数据传输的基石&#xff08;数据传输规则&#xff09; 特点 ⭐基于TCP协…...

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…...

Tap虚拟网卡

1 概述 Tap设备通常用于虚拟化场景下&#xff0c;其驱动代码位于drivers/net/tun.c&#xff0c;tap与tun复用大部分代码&#xff0c; 注&#xff1a;drivers/net/tap.c并不是tap设备的代码&#xff0c;而是macvtap和ipvtap&#xff1b; 下文中&#xff0c;我们统一称tap&#…...

【数电笔记】53-与非门构成的基本RS触发器

目录 说明&#xff1a; 1. 电路组成 2. 逻辑功能 3. 特性表 4. 特性方程 5. 状态转换图 6. 驱动表 7. 例题 例1 例2 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#xff0c;只对个人认为重要章节做了笔记&#xff1b…...

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录 1. k8s环境 k8s使用kubernetes-server-linux-amd64_1.19.10.tar.gz 二进制bin 的方式手动部署 k8s 版本: [rootmaster ~]# kubectl version Client Version: version.Info{Major:"1", Minor:&…...

数字记忆自主化:GetQzonehistory技术架构与数据保护实践指南

数字记忆自主化&#xff1a;GetQzonehistory技术架构与数据保护实践指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 一、技术演进视角下的数据脆弱性危机 数字存储技术的迭代速度与…...

告别教材下载烦恼:国家中小学智慧教育平台电子课本解析工具如何实现3分钟高效获取

告别教材下载烦恼&#xff1a;国家中小学智慧教育平台电子课本解析工具如何实现3分钟高效获取 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地…...

BiliTools:你的跨平台B站资源智能下载助手,轻松保存高清视频与无损音频

BiliTools&#xff1a;你的跨平台B站资源智能下载助手&#xff0c;轻松保存高清视频与无损音频 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Tren…...

如何三步搞定iOS微信聊天记录完整导出:隐私保护与数据备份终极指南

如何三步搞定iOS微信聊天记录完整导出&#xff1a;隐私保护与数据备份终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法永久保存重要微信对话而烦恼吗&…...

PingFangSC字体专业配置与高效应用实践指南

PingFangSC字体专业配置与高效应用实践指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在数字设计领域&#xff0c;字体选择直接影响用户体验与信息传…...

从原理到实践:深入理解Shellcode免杀技术及其对抗策略

Shellcode免杀技术的深度解析与对抗策略演进 在网络安全攻防对抗的永恒博弈中&#xff0c;Shellcode免杀技术始终占据着特殊地位。不同于传统的恶意软件检测规避&#xff0c;Shellcode免杀更注重代码层面的"隐形"能力&#xff0c;其核心在于让关键载荷在内存中执行时…...

地理计算引擎GeographicLib全解析:从场景应用到算法原理

地理计算引擎GeographicLib全解析&#xff1a;从场景应用到算法原理 【免费下载链接】geographiclib Main repository for GeographicLib 项目地址: https://gitcode.com/gh_mirrors/ge/geographiclib 一、核心场景应用解析&#xff1a;解决真实世界地理难题 在航海导航…...

告别系统管理困境:WinUtil让Windows优化效率提升300%

告别系统管理困境&#xff1a;WinUtil让Windows优化效率提升300% 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 作为Windows用户&#xff0c…...

League-Toolkit:告别繁琐操作,让英雄联盟玩家效率提升300%的智能助手

League-Toolkit&#xff1a;告别繁琐操作&#xff0c;让英雄联盟玩家效率提升300%的智能助手 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 副…...

电商客服外包怎么选|避坑指南[特殊字符]2026 商家必看

做电商绕不开客服外包&#xff0c;但低价陷阱、转包兼职、大促掉链、响应超时、售后甩锅真的太坑了&#xff01;今天整理一套不踩雷选型攻略&#xff0c;全是行业干货&#xff0c;新手也能直接抄作业&#x1f447; &#x1f6ab;先避坑&#xff1a;这些雷区千万别碰 超低价诱惑…...