text:(连接池链接 初始化)

master
zhang xu 2024-05-14 22:15:46 +08:00
parent cb94836638
commit bd6233a8c4
1 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,113 @@
package com.zx.domain;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
/**
* @ClassDescription:
* @JdkVersion: 17
* @Author: zhangxu
* @Created: 2024/5/14 10:38
*/
@Component
@Log4j2
public class MyDataSource {
private static HashMap<String, DruidDataSource> pools=new HashMap<>();
/**
* Druid
*
* @param dataSourceList
*/
public static void info(List<DataSource> dataSourceList){
dataSourceList.stream().forEach(dataSource -> {
// 构造jdbc连接字符串
String jdbcUrl="jdbc:"+dataSource.getType().toLowerCase()+"://"+dataSource.getLinkAddress()+":"+dataSource.getPort()+"/"+dataSource.getDatabaseName();
// 创建并配置Druid数据源实例
DruidDataSource druidSource = new DruidDataSource();
druidSource.setUrl(jdbcUrl);
druidSource.setUsername(dataSource.getUsername());
druidSource.setPassword(dataSource.getPassword());
// 配置连接池参数
druidSource.setInitialSize(Integer.valueOf(dataSource.getInitNum().toString()));
druidSource.setMinIdle(5);
druidSource.setMaxActive(Integer.valueOf(dataSource.getMaxNum().toString()));
// 初始化Druid数据源异常情况下抛出运行时异常
try {
druidSource.init();
} catch (SQLException e) {
throw new RuntimeException(e);
}
// 将数据源实例存储到pools中以备后续使用
pools.put(dataSource.getDataSourceName()+"_"+dataSource.getId(), druidSource);
});
}
/**
* key
*
* @param key DruidDataSource
* @return Connection
* @throws RuntimeException SQLExceptionRuntimeException
*/
public static Connection getConnection(String key){
// 根据key获取对应的DruidDataSource连接池
DruidDataSource druidDataSource = pools.get(key);
// 尝试从连接池中获取一个数据库连接
try {
return druidDataSource.getConnection();
} catch (SQLException e) {
// 如果获取连接失败,抛出运行时异常
throw new RuntimeException(e);
}
}
/**
*
*
*
* @param connection
* @throws RuntimeException SQLException
*/
public static void addBack(Connection connection){
try {
connection.close(); // 尝试关闭数据库连接
} catch (SQLException e) {
throw new RuntimeException(e); // 如果关闭连接失败,转换异常并抛出
}
}
/**
* 使线
*
* @param key DruidDataSource
*/
public static void size(String key){
// 根据键从连接池映射中获取DruidDataSource实例
DruidDataSource druidDataSource = pools.get(key);
// 获取当前正在使用的连接数量
int activeCount = druidDataSource.getActiveCount();
// 获取线程池中当前的连接数量
int poolingCount = druidDataSource.getPoolingCount();
// 记录连接池的使用情况
log.info(key+" 连接池中正在使用连接: "+activeCount+"个 ,线程池中线程数量: "+poolingCount+"个");
}
public static void setPools(HashMap<String, DruidDataSource> pools) {
MyDataSource.pools = pools;
log.info("数据源池初始化成功");
for (String key : pools.keySet()) {
log.info("数据源池初始化成功key: "+key);
}
}
}