多数据源连接池

这个博客介绍了如何使用Java实现一个多数据源连接池。作者提供了三个关键类:MultiPool(连接池)、ConnectionManager(连接管理器)和DBConnection(数据库连接对象),支持包括MySQL、Oracle和Hive2在内的多种数据库。MultiPool和ConnectionManager采用了单例模式,连接参数通过properties文件配置。博客还提及了未来将增加动态和静态管理连接池数量的功能。
摘要由CSDN通过智能技术生成

做元数据管理,需要查询多个数据源的元数据,不用orm框架,直接用java实现。如下

主要有几个重要的类:MultiPool (连接池)  ConnectionManager (连接管理器) DBConenction (数据库连接对象)

1. MultiPool 和 ConnectionManager 都使用单例模式

2. 数据库连接参数如driverClassName, url 使用properties配置

3. 经测试,mysql,oracle, hive2测试通过

4. 添加动态和静态管理连接池个数(还未实现,后续补充)


MultiPool代码

package wuyx.multipool;

import java.sql.Connection;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/***
 * 多数据源链接池
 * @author wuyx
 *
 */
public class MultiPool {
    private static MultiPool instance=null;
    
    private static Map<String, List<Connection>> pool;
    private static Map<String, List<Connection>> free = null;
    
    static{
        free = new Hashtable<String, List<Connection>>();
        pool = new Hashtable<String, List<Connection>>();
    }
    
    /**
     * 获取实例
     * @return
     */
    public static MultiPool getInstance(){
        if(instance == null){
            instance = new MultiPool();
        }
        return instance;
    }
    
    /**
     * 获取一个指定库的连接
     * @param dbType
     * @return
     */
    public Connection get(String dbType){
        return first(dbType);
    }
    
    /**
     * 返回第一个空闲的连接
     * @param dbType
     * @return
     */
    synchronized Connection first(String dbType){
        Connection ret = free.get(dbType).get(0);
        free.remove(0);
        return ret;
    }
    
    /**
     * 释放连接
     * @param dbType
     * @param conn
     */
    public synchronized void release(String dbType, Connection conn){
        free.get(dbType).add(conn);
    }
    
    /**
     * 往连接池中增加一个连接
     * @param dbType
     * @param conn
     */
    public synchronized void add(String dbType, Connection conn){
        if(pool.get(dbType) == null){
            List<Connection> list = new Vector<Connection>();
            pool.put(dbType, list);
        }
        if(free.get(dbType) == null){
            List<Connection> fs = new Vector<Connection>();
            free.put(dbType,

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值