NebulaGraph学习笔记-自定义SessionPool

server/2025/1/9 0:35:07/
最近看了一下NebulaGraph图数据库连接的部分资料,发现还可以通过SessionPool的方式连接。下面是一个简单的DEMO记录。
组件项目
  • 相关依赖包
<!-- SpringBoot依赖包 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId>
</dependency><!-- Client依赖包 -->
<dependency><groupId>com.vesoft</groupId><artifactId>client</artifactId><version>3.8.4</version>
</dependency>
  • NebulaGraph连接属性类
java">@Data
@ConfigurationProperties(prefix = "nebula-graph")
public class NebulaGraphProperties {/** 集群节点 */private String[] clusterNodes = null;/** 用户名 */private String username;/** 密码 */private String password;private List<CSessionPoolConfig> cSessionPoolConfigs = new ArrayList<>();@Datapublic static class CSessionPoolConfig {/** 空间名称 */private String spaceName;/** 最小Session数 */private int minSessionSize = 10;/** 最大Session数 */private int maxSessionSize = 100;/** 是否重连 */private boolean reconnect = true;/** Timeout */private int timeout = 0;/** WaitTime */private int waitTime = 0;/** CleanTime */private int cleanTime = 3600;/** IntervalTime */private int intervalTime = 0;/** Health Check Time */private int healthCheckTime = 600;/** Retry Connect Times */private int retryConnectTimes = 1;/** Retry Times */private int retryTimes = 3;}}
  • SessionPoolBeanDefinitionRegistrar类
java">public class SessionPoolBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {private NebulaGraphProperties nebulaGraphProperties;@Overridepublic void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {if (ObjectUtil.isNull(nebulaGraphProperties)) {return;}List<NebulaGraphProperties.CSessionPoolConfig> cSessionPoolConfigs = nebulaGraphProperties.getCSessionPoolConfigs();if (cSessionPoolConfigs.isEmpty()) {return;}List<HostAddress> hostAddresses = new ArrayList<>();String[] clusterNodes = nebulaGraphProperties.getClusterNodes();for (int i = 0, len = clusterNodes.length; i < len; i++) {String clusterNode = clusterNodes[i];if (!clusterNode.contains(":")) {continue;}String[] ipAndPort = clusterNode.split(":");if (ipAndPort.length != 2 || !ipAndPort[1].matches("\\d+")) {throw new RuntimeException("Invalid Nebula Graph Node " + clusterNode);}hostAddresses.add(new HostAddress(ipAndPort[0], Integer.parseInt(ipAndPort[1])));}String username = nebulaGraphProperties.getUsername();String password = nebulaGraphProperties.getPassword();cSessionPoolConfigs.forEach(cSessionPoolConfig -> {String spaceName = cSessionPoolConfig.getSpaceName();if (CharSequenceUtil.isBlank(spaceName)) {return;}SessionPoolConfig sessionPoolConfig = new SessionPoolConfig(hostAddresses, spaceName, username, password);sessionPoolConfig.setMinSessionSize(cSessionPoolConfig.getMinSessionSize());sessionPoolConfig.setMaxSessionSize(cSessionPoolConfig.getMaxSessionSize());sessionPoolConfig.setTimeout(cSessionPoolConfig.getTimeout());sessionPoolConfig.setWaitTime(cSessionPoolConfig.getWaitTime());sessionPoolConfig.setCleanTime(cSessionPoolConfig.getCleanTime());sessionPoolConfig.setIntervalTime(cSessionPoolConfig.getIntervalTime());sessionPoolConfig.setHealthCheckTime(cSessionPoolConfig.getHealthCheckTime());sessionPoolConfig.setRetryConnectTimes(cSessionPoolConfig.getRetryConnectTimes());sessionPoolConfig.setRetryTimes(cSessionPoolConfig.getRetryTimes());sessionPoolConfig.setReconnect(cSessionPoolConfig.isReconnect());RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();rootBeanDefinition.setBeanClass(SessionPool.class);rootBeanDefinition.getConstructorArgumentValues().addGenericArgumentValue(sessionPoolConfig);beanDefinitionRegistry.registerBeanDefinition(String.format("%sSessionPool", spaceName), rootBeanDefinition);});}@Overridepublic void setEnvironment(Environment environment) {BindResult<NebulaGraphProperties> bindResult = Binder.get(environment).bind(nebulaGraphPropertiesPrefix(), NebulaGraphProperties.class);if (ObjectUtil.isNotNull(bindResult) && bindResult.isBound()) {nebulaGraphProperties = bindResult.get();}}private String nebulaGraphPropertiesPrefix() {return Objects.requireNonNull(AnnotationUtils.getAnnotation(NebulaGraphProperties.class, ConfigurationProperties.class)).prefix();}}
  • SpringBoot自动配置
java">@EnableConfigurationProperties({ NebulaGraphProperties.class })
@Import({ SessionPoolBeanDefinitionRegistrar.class })
@Configuration
public class NebulaGraphAutoConfiguration {}
  • spring.factories文件开启自动配置
java">org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.component.nebula.graph.config.NebulaGraphAutoConfiguration
业务项目
  • 引入组件项目
java"><!--ComponentNebulaGraph依赖包-->
<dependency><groupId>com.component</groupId><artifactId>component-nebula-graph</artifactId><version>1.0.0-SNAPSHOT</version>
</dependency>
  • 项目引入配置
nebula-graph:cluster-nodes:- 192.168.0.1:9559- 192.168.0.1:9669username: rootpassword: 123456c-session-pool-configs:- space-name: tmp1_space_namemin-session-size: 10max-session-size: 200
  • 项目引入部分代码
java">@Slf4j
@Service("nebulaGraphService")
public class NebulaGraphServiceImpl implements NebulaGraphService {@Autowiredprivate SessionPool sessionPool;protected String executeJsonWithParameter(String statement, Map<String, Object> paramsMap)throws ClientServerIncompatibleException, AuthFailedException, BindSpaceFailedException, IOErrorException {return sessionPool.executeJsonWithParameter(statement, paramsMap);}}
总体来说也是比较简单的。

http://www.ppmy.cn/server/156559.html

相关文章

ubuntu 22下解决Unment dependencies问题

问题现象 在使用apt安装包的时候&#xff0c;出现如下错误&#xff1a; 解决方案 第一步 sudo apt-get -f install sudo apt-get update sudo apt-get upgrade第二步 sudo apt-get update sudo apt-get clean sudo apt-get autoremove第三步 sudo apt --fix-broken inst…

行政审批远程勘验管理系统(源码+文档+部署+讲解)

引言 在快速发展的现代社会&#xff0c;远程踏勘系统作为一项创新技术&#xff0c;正逐渐改变传统的现场勘察工作模式。本文将详细介绍远程踏勘系统的核心功能、技术优势以及它如何提升现场勘察的效率。 系统概述 远程踏勘系统采用前后端分离的架构设计&#xff0c;服务端基…

【漏洞分析】DDOS攻防分析(二)

0x00 HTTP DDOS攻击实例解析 2014年5月&#xff0c;颇负盛名的搜狐视频&#xff0c;背负了一起著名的DDoS攻击事件。 当时&#xff0c;日本CDN服务商Incapsula声称&#xff0c;自己的一位客户的服务器遭遇了搜狐视频发起的DDoS攻击&#xff0c;期间总共有超过2万的网民通过搜…

HTML5新特性|05 CSS3边框CSS3背景

CSS3边框 1、CSS3边框: 通过CSS3&#xff0c;您能够创建圆角边框&#xff0c;向矩形添加阴影&#xff0c;使用图片来绘制边框-并且不需使用设计软件&#xff0c;比如PhotoShop。 属性: border-radius 圆角box-shadow:水平阴影 垂直阴影 阴影的清晰度 阴影的大小 阴影的颜色…

python+PyMuPDF库:(三)pdf文件的选择性合并、其他格式文件转pdf

insert_file: 支持docx、xlsx、pdf、PPTX、txt、svg、xps、FB2、CBZ、EPUB、MOBI、HWPX、图片等多种格式的文件的插入。利用此方法可以将此类文件转为pdf格式的文件。 insert_pdf &#xff1a;用来打开pdf文件并插入。 insert_file和insert_pdf使用相同的参数&#xff0c;常用…

【设计模式】 基本原则、设计模式分类

设计模式 设计模式是软件工程中的一种通用术语&#xff0c;指的是针对特定问题的经过实践验证的解决方案。设计模式并不是最终的代码实现&#xff0c;而是描述了如何解决某一类问题的思路和方法。 如果熟悉了设计模式&#xff0c;当遇到类似的场景&#xff0c;我们可以快速地…

数据结构-栈与队列笔记

普通的双端队列 验证图书取出顺序 class Solution {/*** 验证书籍的借阅顺序是否合法。* * param putIn 表示放入书架的书籍序列。* param takeOut 表示从书架取出的书籍序列。* return 如果书籍的借阅顺序合法&#xff0c;返回 true&#xff1b;否则返回 false。*/public boo…

探索 Vue.js 的动态样式与交互:一个有趣的样式调整应用

修改日期备注2025.1.3初版 一、前言 今天和大家分享在 Vue.js 学习过程中开发的超酷的小应用。这个应用可以让我们通过一些简单的交互元素&#xff0c;如复选框、下拉菜单和输入框&#xff0c;来动态地改变页面上元素的样式哦 让我们一起深入了解一下这个项目的实现过程&…