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();
    }
}
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值