Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:104)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 128 more
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:958)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
... 131 more
我用的是SSH
Spring配置文件如下:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 依赖注入数据源,注入正是上面定义的dataSource -->
<property name="dataSource" ref="dataSource" />
<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<!-- 指定数据库方言 org.hibernate.dialect.MySQLDialect -->
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<!-- 允许hibernate自动提交 -->
<prop key="hibernate.connection.autocommit">true</prop>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否根据需要每次自动创建数据库 update -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 将SQL脚本进行格式化后再输出 -->
<prop key="hibernate.format_sql">true</prop>
</props>
<!-- mappingResouces属性用来列出全部映射文件 -->
</property>
<property name="mappingResources">
<list>
<!-- 以下用来列出Hibernate映射文件 -->
<value>com/ucans/home/config/mapping/TBookInfo.hbm.xml</value>
<value>com/ucans/home/config/mapping/TBookOriginalInfo.hbm.xml</value>
<value>com/ucans/home/config/mapping/TcBookBigType.hbm.xml</value>
<value>com/ucans/home/config/mapping/TcBookSmallType.hbm.xml</value>
<value>com/ucans/home/config/mapping/TBoughtBookInfo.hbm.xml</value>
<value>com/ucans/home/config/mapping/TBookStatisticsInfo.hbm.xml</value>
<value>com/ucans/login/config/mapping/TReaderSelfinfo.hbm.xml</value>
<value>com/ucans/shoppingCard/config/mapping/TShoppingCartInfo.hbm.xml</value>
<value>com/ucans/detail/config/mapping/TReviewInfo.hbm.xml</value>

</list>
</property>
</bean>

<!-- 定义数据源Bean,使用apache dbcp数据源实现 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!-- 指定连接数据库的驱动 com.mysql.jdbc.Driver -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<!-- 指定连接数据库的URL jdbc:mysql://localhost:3306/ebook?useUnicode=true&amp;characterEncoding=UTF-8 -->
<property name="url" value="jdbc:oracle:thin:@12.13.14.15:1521:aaa" />
<!-- 指定连接数据库的用户名 -->
<property name="username" value="aaaa" />
<!-- 指定连接数据库的用户密码 -->
<property name="password" value="aaaaa" />
<!-- 指定连接数据库连接池的最大激活连接数 -->
<property name="maxActive" value="100" />
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<property name="maxIdle" value="30" />
<!-- 指定连接数据库连接池的连接的最大等待秒钟数 -->
<property name="maxWait" value="500" />
<!-- 打开自动提交模式 -->
<property name="defaultAutoCommit" value="true"></property>
</bean>请大家帮我看看是这段配置有问题吗?请指点一二。谢谢了。

解决方案 »

  1.   


    配置好像没什么问题;刚刚帮LZ Google了一下说的是
    pool error Timeout waiting for idle object
    意思是数据库连接池泄露Lz 可以设置一下max-active及max-idle为较小的值(如10,5),这样可以及早发现问题解决问题。
      

  2.   

    改小点试试:<property name="maxActive" value="100" />
      

  3.   

    我改成10和100都试过了,还是同样错误我在网上查说是连接未关闭,Hibernate不是自已控制的吗?不用手动干预吧
      

  4.   

    你用的数据库是不是oracle非企业版?因为开发版的oracle是限制连接数的
      

  5.   

    改小点试试:<property name="maxActive" value="100" /> 再重新启动开发平台试试
      

  6.   

    <property name="url" value="jdbc:oracle:thin:@12.13.14.15:1521:aaa" />确定 12.13.14.15:1521 能ping通?好个性的地址
      

  7.   

    public class OracleConnection {
       public static Connection getConn(){
       Connection conn = null;
       try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url="jdbc:oracle:thin:@localhost:1521:orcl";
    String user="System";
    String password="aaaaaa";
     conn= DriverManager.getConnection(url,user,password); 

    } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return conn;
       
       }
       public static void main(String[] args) {
    System.out.println(getConn());
    }
    }
    改了 测试下!! 看 能连不
     Cannot get a connection, pool error Timeout waiting for idle object