一个连接池的问题,请高手指教~~~ Cannot get a connection, pool exhausted
异常有这么几个
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:756)
根据异常,看出来是连接池耗尽。 这个有什么办法解决吗? 框架是s2sh + free. 
用总监封装的 conn = DbHelper.getConnection(); 方法。jdbc操作的时候,一台机器开2-3个线程,0.1秒一次的频率访问的时候就出现连接池不够用。 但是用hibernate 里面的方法调用,一台机器开5个线程0.1秒一次的频率访问 暂时没有问题。 问题出在用jdbc操作sql的这些方法里面。 哪个高手有办法解决这个连接配置问题吗? 感激不尽!~~

解决方案 »

  1.   

    DbHelper中 创建链接函数如下public static Connection getConnection() {
    Connection result = null;
    try {
    Context ctx = new InitialContext();
    DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/XXXDs"); result = dataSource.getConnection();
    result.setAutoCommit(false);
    }
    catch (Exception ex) {
    ex.printStackTrace();
    }
    return result;
    }
      

  2.   

    你总监写的只有创建连接,没有关闭连接吗?hibernate的话,它自己会进行维护~就像2楼说的,是没有关闭连接引起的连接耗尽
      

  3.   

    自己的问题暂时搞定了。 一台机器开5个线程0.1秒一次的频率访问 已经ok了。不会出现2个线程就挂掉的情况了。。
    简单的东西也要注意.... 记录下来方便以后查询。。
    http://yijianfengvip.blog.163.com/blog/static/175273432201201222133793/
      

  4.   

    result.setAutoCommit(false);
    这里跑出来一个 异常,那么 conn 就永远不会被回收。
    很显然,有写conn 没有被关闭。
    你可以用ThreadLocal 绑定conn , 测试下