做元数据管理,需要查询多个数据源的元数据,不用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,