Sharding-JDBC 使用 Nacos 作为配置中心 【下 代码实战】

2024-06-13 00:20

本文主要是介绍Sharding-JDBC 使用 Nacos 作为配置中心 【下 代码实战】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Sharding-JDBC 使用 Nacos 作为配置中心 【下 代码实战】

1. 实现 ShardingSphereDriverURLProvider

由上一篇博文我们已经知道了 Sharding-JDBC 是基于 Java SPI 机制去加载 并实例化 ShardingSphereDriverURLProvider 的实现类

public interface ShardingSphereDriverURLProvider {boolean accept(String var1);byte[] getContent(String var1);
}

ShardingSphereDriverURLProvider接口有两个抽象方法 accept()方法用于判断当前的url是否满足条件,如果满足将调用 getContent ()方法获取数据源配置信息。因此我们可以新建一个 NacosDriverUrlProvider 实现 ShardingSphereDriverURLProvider ,并在 META-INF/services下新建一个文件 org.apache.shardingsphere.driver.jdbc.core.driver.ShardingSphereDriverURLProvider ,文件内容为 NacosDriverUrlProvider 的全限定类名。

image-20240612215136982

image-20240612215156026

2.NacosDriverUrlProvider

2.1 重写 accept() 方法

我们先重写 accept()方法,判断url中是否包含 “nacos:”,如果有,则适用于 NacosDriverUrlProvider 类去加载配置

private final static String NACOS_MARK = "nacos:";@Override
public boolean accept(String url) {return StringUtils.isNotBlank(url) && url.contains(NACOS_MARK);
}

2.2 重写 getContent() 方法

我们获取到nacos的url的连接后,通过 NacosFactory.createConfigService 去获取 nacos的配置信息,相关案例在nacos官网也有实例代码

try {String serverAddr = "{serverAddr}";String dataId = "{dataId}";String group = "{group}";Properties properties = new Properties();properties.put("serverAddr", serverAddr);ConfigService configService = NacosFactory.createConfigService(properties);String content = configService.getConfig(dataId, group, 5000);System.out.println(content);
} catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace();
}

将url分割获取到参数后,封装到 Properties 中,然后通过 NacosFactory.createConfigService 获取 ConfigService 对象后获取到配置信息

 private final static String FIXED_PREFIX = "jdbc:shardingsphere:";public byte[] getContent(String url) {int nacosPrefix = url.indexOf(FIXED_PREFIX + NACOS_MARK);String realUrl = url.substring(nacosPrefix + (FIXED_PREFIX + NACOS_MARK).length(), url.length());int serverAddrEndIndex = realUrl.indexOf("?");String serverAddr = realUrl.substring(0, serverAddrEndIndex);String args = realUrl.substring(serverAddrEndIndex+1, realUrl.length());String[] split = args.split("&");String dataId = "";String group = "";String namespace = "";String username = "";String password = "";for (String str : split) {int index = str.indexOf("=");String substring = str.substring(0, index);switch (substring){case  "dataId" :dataId = str.substring(index+1,str.length());break;case  "group" :group = str.substring(index+1,str.length());break;case  "namespace" :namespace = str.substring(index+1,str.length());break;case  "username" :username = str.substring(index+1,str.length());break;case  "password" :password = str.substring(index+1,str.length());break;}}String content = "";try {Properties properties = new Properties();properties.put("serverAddr", serverAddr);properties.put("namespace", namespace);properties.put("username", username);properties.put("password", password);ConfigService configService = NacosFactory.createConfigService(properties);content = configService.getConfig(dataId, group, 5000);} catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace();}return content.getBytes();
}

这篇关于Sharding-JDBC 使用 Nacos 作为配置中心 【下 代码实战】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055762

相关文章

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总