目前大多数程序开发都需要用到数据库连接池,在数据库连接池的管理类中,就使用了单例模式,来实现对连接池的管理。这里模拟一个连接池的 管理类Manager.java,它的示意代码如下:
//***Manage.java*********************
public class Manager{
static private Manager instance;//单例模式
private static Map connPool = new HashMap();
//return Manager
static synchronized public Manager getInstance(){
if (instance == null) instance = new Manager();
return instance;
}
private Manager(){ init(); }//防止其他对象创建本类的实例
//根据名称从map中获取连接
public static Connection getConnection(String name){
Connection conn = null;
try{
//从连接池中获取连接
ConnectionPool pool = (ConnecionPoolImpl)connPool.get(name);
if (pool != null) conn = pool.getConnection();
}catch(Exception ex){
ex.printStackTrace();
}finally{
return conn;
}
}
//将连接返回连接池
Public static void returnConnection(String name, Connection conn){
try{
ConnecitonPool pool = (ConnectionPoolImpl)connPool.get(name);
if (pool != null) pool.returnConnection();
}catch(Exception e){
e.printStackTrace();
}
}
//关闭所有的连接
public synchronized void release(){
try{
Set set = connPool.entrySet();
Iterator iterator =set.iterator();
while(iterator.hasNext()){
Map.Entry map = (Map.Entry)iterator.next();
ConnectionPool pool = (ConnecitonPoolImpl)map.getValue();
//关闭连接池
pool.setConnWitch("OFF");
}
connPool = null;
}catch(Exception e){
e.printStackTrace();
}
}
//创建连接池
private void createPools(){
ConnectionPool pool = new ConnectionPoolImpl();
//设定连接池大小
pool.setMaxConns(10);
try{
//表示创建连接池
pool.setConnWitch("ON");
//将创建后的连接池放在Map中,用mysql表示是用于连接mysql数据库的
connPool.put("mysql",pool);
}catch(Exception e){
e.printStackTrace();
}
}
//初始化
private void init(){
//创建连接池
createPools();
}
}