动态创建多个连接池
来源:互联网 发布:上海网络推广招聘 编辑:程序博客网 时间:2024/04/30 13:58
系统场景:系统依赖多个数据库。其中一台数据库服务器运行ORACLE,同时还有数台机器上跑着ObjectServer内存数据库。由于到部署时才能确定从机的数量,因此需要动态创建连接池
方案:Oracle数据库用c3p0来管理连接池。另外写一个连接管理器来动态创建内存数据库连接池
代码:经过简化,只贴出关键代码,去掉日志、异常处理、null检查等
方案:Oracle数据库用c3p0来管理连接池。另外写一个连接管理器来动态创建内存数据库连接池
代码:经过简化,只贴出关键代码,去掉日志、异常处理、null检查等
// ObejctServer连接池,系统中域的数量与该类实例一一对应 public class DBConnectionPool{ private int checkedOut;// 已检出的连接数 private Vector<Connection> freeConnections = new Vector<Connection>();// 空闲连接数 // 返还连接 public synchronized void freeConnection(Connection con, Object lock) { freeConnections.addElement(con); this.checkedOut--; lock.notifyAll(); } // 从连接池中获取连接 public Connection getConnection(Object lock) { Connection con; while ((con = fetchConnection()) == null)// 循环调用fetchConnection()方法 { lock.wait(timeout);// 没获取到可用连接,则等待 // 如果超时了,则return null } return con; }}
// 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; } }}
- 动态创建多个连接池
- TOMCAT动态创建连接池
- 创建多个拨号连接
- 动态连接库创建
- 利用List动态创建多个计时器
- js动态创建多个按钮
- 动态创建多个KindEditor编辑器
- 创建DLL动态连接库
- 怎样创建动态连接库
- 创建DLL动态连接库
- 动态连接库的创建
- 创建MFC动态连接库
- WINCE创建动态连接库
- 动态创建数据库和动态连接数据库
- 动态创建数据库和动态连接数据库
- DELPHI 动态 创建和释放 多个 EDIT 控件
- 动态创建多个对象并分行显示实例
- Flex 动态创建多个曲线图/柱形图 ColumnSeries
- javascript_core阅读笔记(五)
- django第三方类库 - django-south 项目开始中就使用south方法
- 关于自定义组合组件应用的问题总结
- PostgreSQL使用方法
- javascript原型链体会
- 动态创建多个连接池
- Logback在调用打印方法后所做的事
- Logback笔记
- 在windows XP下搭建android开发环境
- android一周小结
- android第二周小结
- activity存在的三种状态
- onPause()方法的特殊性
- android第三周小结