3.5 单例模式在数据库连接池管理中的实际应用

目前大多数程序开发都需要用到数据库连接池,在数据库连接池的管理类中,就使用了单例模式,来实现对连接池的管理。这里模拟一个连接池的 管理类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();
    }
}

猜你喜欢

转载自blog.csdn.net/xiaohaopei/article/details/82257257
3.5
今日推荐