解决方案 »

  1.   

    木有认真看,还以为你是自己实现了一个连接池。。
    你这close是把连接用完以后关闭了么,不是还给连接池?
      

  2.   


    c3p0连接池,要直接关掉的。
    http://bbs.csdn.net/topics/390458524?page=1#post-394497078
      

  3.   

    额,你这里调用的close应该是放回连接池并不是关闭物理连接的,之前我没想对
      

  4.   

    虽然使用了 ConcurrentHashMap 但并未处理         ComboPooledDataSource dataSource = dataSources.get(connName);
     
            if (dataSource != null) {
                return dataSource;
            }这块代码的同步问题,如果竞争激烈的话,很可能会造成连接泄漏。
      

  5.   

    另外,对于异常处理非常不好,比如:        } catch (PropertyVetoException e) {
                log.error("jdbc.properties error ", e);
            } catch (Exception e) {
                log.error("datasource generate error ", e);
            }        dataSources.put(connName, dataSource);
     
            return dataSource;直接把异常吃了,如果 dataSource 没有初始化成功,也将 put 到 dataSources 中,并返回给调用者一个 null 值的 dataSource。
      

  6.   


    谢谢火龙果!那么这个异常怎么处理比较好呢?throw 一个运行是异常吗?
      

  7.   


    这里不会吧,ConcurrentHashMap只是读取数据,put的时候可能会有点问题,
    put的时候加个锁就行了
    synchronized (dataSources) {
    dataSources.put(connName, dataSource);
    }怎么配置?
      

  8.   

    MARK 正想把部分业务处理使用另外一个库去执行。
      

  9.   

    我看不出你这个关闭是放回连接池中你的conn是sql包中的connection所以你直接关掉了。
      

  10.   

    我看不出你这个关闭是放回连接池中,你的conn是sql包中的connection所以你直接关掉了。 
      

  11.   


    看这个火龙果大大的回复:http://bbs.csdn.net/topics/330195313c3p0是要关闭的。其他的连接池不了解