main
HuangHai 2 months ago
parent 00296395fb
commit c35ff86f13

@ -1,5 +1,6 @@
package com.dsideal.Res.Plugin;
import com.jfinal.plugin.IPlugin;
import io.milvus.pool.MilvusClientV2Pool; // Milvus V2版本连接池类
import io.milvus.pool.PoolConfig; // 连接池配置类
import io.milvus.v2.client.ConnectConfig; // 连接配置类
@ -10,10 +11,13 @@ import org.slf4j.LoggerFactory; // 日志工厂
import java.time.Duration; // 时间间隔类
@Getter // 自动为所有字段生成getter方法
public class MilvusPlugin {
public class MilvusPlugin implements IPlugin {
private static MilvusPlugin instance; // 单例实例
private static final Logger logger = LoggerFactory.getLogger(MilvusPlugin.class); // 日志记录器
private MilvusClientV2Pool pool; // Milvus连接池实例
private String host; // Milvus服务地址
private int port; // Milvus服务端口
private int maxConnections; // 最大连接数
// 私有构造方法,确保单例模式
private MilvusPlugin() {
@ -27,9 +31,43 @@ public class MilvusPlugin {
return instance;
}
// 初始化连接池
public void init(String host, int port, int maxConnections) {
// 设置Milvus连接配置
public void setConfig(String host, int port, int maxConnections) {
this.host = host;
this.port = port;
this.maxConnections = maxConnections;
}
// 从连接池获取客户端连接
public MilvusClientV2 getClient() {
try {
if (pool != null) {
return pool.getClient("client_name"); // 使用固定key获取连接
} else {
logger.error("Milvus连接池未初始化");
throw new RuntimeException("Milvus连接池未初始化");
}
} catch (Exception e) {
logger.error("获取Milvus连接失败: " + e.getMessage(), e);
throw new RuntimeException("获取Milvus连接失败", e);
}
}
// 归还客户端连接到连接池
public void returnClient(MilvusClientV2 client) {
if (client != null && pool != null) {
pool.returnClient("client_name", client); // 使用固定key归还连接
}
}
@Override
public boolean start() {
try {
if (host == null || port <= 0 || maxConnections <= 0) {
logger.error("Milvus连接配置不完整");
throw new RuntimeException("Milvus连接配置不完整");
}
// 构建连接配置
ConnectConfig connectConfig = ConnectConfig.builder()
.uri("http://" + host + ":" + port) // 设置Milvus服务地址
@ -47,33 +85,24 @@ public class MilvusPlugin {
// 创建连接池实例
pool = new MilvusClientV2Pool(poolConfig, connectConfig);
logger.info("Milvus连接池初始化成功最大连接数{}", maxConnections);
return true;
} catch (Exception e) {
logger.error("Milvus初始化失败: " + e.getMessage(), e);
throw new RuntimeException("Milvus初始化失败", e);
}
}
// 从连接池获取客户端连接
public MilvusClientV2 getClient() {
@Override
public boolean stop() {
try {
return pool.getClient("client_name"); // 使用固定key获取连接
if (pool != null) {
pool.close(); // 释放所有连接资源
logger.info("Milvus连接池已关闭");
}
return true;
} catch (Exception e) {
logger.error("获取Milvus连接失败: " + e.getMessage(), e);
throw new RuntimeException("获取Milvus连接失败", e);
}
}
// 归还客户端连接到连接池
public void returnClient(MilvusClientV2 client) {
if (client != null) {
pool.returnClient("client_name",client); // 使用固定key归还连接
}
}
// 关闭连接池
public void close() {
if (pool != null) {
pool.close(); // 释放所有连接资源
logger.error("关闭Milvus连接池失败: " + e.getMessage(), e);
throw new RuntimeException("关闭Milvus连接池失败", e);
}
}
}
}

@ -1,5 +1,6 @@
package com.dsideal.Res.Plugin;
import com.jfinal.plugin.IPlugin;
import lombok.Getter;
import org.neo4j.driver.*;
import org.neo4j.driver.Config;
@ -9,10 +10,13 @@ import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;
@Getter
public class Neo4jPlugin {
public class Neo4jPlugin implements IPlugin {
private static Neo4jPlugin instance;
private Driver driver;
private static final Logger logger = LoggerFactory.getLogger(Neo4jPlugin.class);
private String uri;
private String user;
private String password;
private Neo4jPlugin() {}
@ -23,17 +27,29 @@ public class Neo4jPlugin {
return instance;
}
public void init(String uri, String user, String password) {
public void setConfig(String uri, String user, String password) {
this.uri = uri;
this.user = user;
this.password = password;
}
@Override
public boolean start() {
try {
if (uri == null || user == null || password == null) {
logger.error("Neo4j连接配置不完整");
throw new RuntimeException("Neo4j连接配置不完整");
}
// 配置连接池
Config config = Config.builder()
.withMaxConnectionLifetime(30, TimeUnit.MINUTES) // 连接最大生命周期
.withMaxConnectionPoolSize(50) // 连接池最大连接数
.withConnectionAcquisitionTimeout(5, TimeUnit.SECONDS) // 获取连接超时时间
.withConnectionTimeout(5, TimeUnit.SECONDS) // 连接超时时间
.withMaxTransactionRetryTime(15, TimeUnit.SECONDS) // 事务重试最大时间
.withFetchSize(1000) // 每次查询的默认获取数量
.build();
.withMaxConnectionLifetime(30, TimeUnit.MINUTES) // 连接最大生命周期
.withMaxConnectionPoolSize(50) // 连接池最大连接数
.withConnectionAcquisitionTimeout(5, TimeUnit.SECONDS) // 获取连接超时时间
.withConnectionTimeout(5, TimeUnit.SECONDS) // 连接超时时间
.withMaxTransactionRetryTime(15, TimeUnit.SECONDS) // 事务重试最大时间
.withFetchSize(1000) // 每次查询的默认获取数量
.build();
// 创建带连接池配置的驱动实例
driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password), config);
@ -43,15 +59,24 @@ public class Neo4jPlugin {
session.run("RETURN 1").consume();
logger.info("Neo4j连接池初始化成功");
}
return true;
} catch (Exception e) {
logger.error("Neo4j初始化失败: " + e.getMessage(), e);
throw new RuntimeException("Neo4j初始化失败", e);
}
}
public void close() {
if (driver != null) {
driver.close();
@Override
public boolean stop() {
try {
if (driver != null) {
driver.close();
logger.info("Neo4j连接池已关闭");
}
return true;
} catch (Exception e) {
logger.error("关闭Neo4j连接池失败: " + e.getMessage(), e);
throw new RuntimeException("关闭Neo4j连接池失败", e);
}
}
}

@ -25,9 +25,6 @@ import org.slf4j.LoggerFactory;
import java.io.File;
public class ResApplication extends JFinalConfig {
private final Neo4jPlugin neo4jPlugin = Neo4jPlugin.getInstance();
private final MilvusPlugin milvusPlugin = MilvusPlugin.getInstance();
private static final Logger logger = LoggerFactory.getLogger(ResApplication.class);
public static void main(String[] args) {
@ -98,30 +95,22 @@ public class ResApplication extends JFinalConfig {
me.add(redis);
// 配置 Neo4j
try {
String url = PropKit.get("neo4j.url");
String username = PropKit.get("neo4j.username");
String password = PropKit.get("neo4j.password");
logger.info("正在初始化Neo4j连接: url={}", url);
neo4jPlugin.init(url, username, password);
} catch (Exception e) {
logger.error("Neo4j配置失败", e);
throw new RuntimeException("Neo4j配置失败", e);
}
String url = PropKit.get("neo4j.url");
String username = PropKit.get("neo4j.username");
String password = PropKit.get("neo4j.password");
logger.info("正在初始化Neo4j连接: url={}, username={},password={}", url, username, password);
Neo4jPlugin neo4jPlugin = Neo4jPlugin.getInstance();
neo4jPlugin.setConfig(url, username, password); // 设置Neo4j连接配置
me.add(neo4jPlugin); // 添加Neo4j插件
// 配置 Milvus
try {
String host = PropKit.get("milvus.ms_host");
int port = PropKit.getInt("milvus.ms_port");
int maxConnections = PropKit.getInt("milvus.ms_max_connections");
logger.info("正在初始化Milvus连接: host={}, port={}", host, port);
milvusPlugin.init(host, port, maxConnections);
} catch (Exception e) {
logger.error("Milvus配置失败", e);
throw new RuntimeException("Milvus配置失败", e);
}
String host = PropKit.get("milvus.ms_host");
int port = PropKit.getInt("milvus.ms_port");
int maxConnections = PropKit.getInt("milvus.ms_max_connections");
logger.info("正在初始化Milvus连接: host={}, port={}", host, port);
MilvusPlugin milvusPlugin = MilvusPlugin.getInstance();
milvusPlugin.setConfig(host, port, maxConnections); // 设置Milvus连接配置
me.add(milvusPlugin); // 添加Milvus插件
}
/**
@ -164,12 +153,4 @@ public class ResApplication extends JFinalConfig {
//打印 启动Logo
System.out.println(FileUtil.readUtf8String("logo.txt"));
}
@Override
public void onStop() {
// JFinal 停止时关闭 Neo4j 连接
neo4jPlugin.close();
// JFinal 停止时关闭 Milvus 连接
milvusPlugin.close();
}
}

Loading…
Cancel
Save