读书人

动态创设多个连接池

发布时间: 2012-06-29 15:48:46 作者: rapoo

动态创建多个连接池
系统场景:系统依赖多个数据库。其中一台数据库服务器运行ORACLE,同时还有数台机器上跑着ObjectServer内存数据库。由于到部署时才能确定从机的数量,因此需要动态创建连接池

方案:Oracle数据库用c3p0来管理连接池。另外写一个连接管理器来动态创建内存数据库连接池

代码:经过简化,只贴出关键代码,去掉日志、异常处理、null检查等

// ObjectServer连接管理器public class DBConnectionManager{    private Hashtable<String, DBConnectionPool> pools;// 连接池集合,每个OS域都有一个连接池       private static final byte[] lock = new byte[0];// 同步锁            // 返还连接    public void freeConnection(String domainName, Connection conn)    {        synchronized (lock)        {                     DBConnectionPool pool = (DBConnectionPool) pools.get(domainName);// 得到域名对应的连接池                       pool.freeConnection(conn, lock);                 }    }    // 获得某从机上的可用连接    public Connection getConnection(String domainName)    {        synchronized (lock)        {                                 DBConnectionPool pool = (DBConnectionPool) pools.get(domainName);            if (null != pool)// 连接池已存在,直接使用            {                return pool.getConnection(lock);                       }            else            {                registerNewConnectionPool(poolProvide);// 注册新连接池                return getConnection(domainName);// 递归调用                    }            return null;        }    }}

读书人网 >软件架构设计

热点推荐