2010-08-05 481 views
1

我得到这个异常只适用于运行几天后我的代码中的一些数据库更新。一些请求通过,其中一些(相同的java代码)失败。MaxOpenPreparedStatements达到的限制

java.sql.SQLException: MaxOpenPreparedStatements limit reached 
     at org.apache.commons.dbcp.PoolingConnection.prepareStatement(PoolingConnection.java:109) 
     at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281) 
     at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313) 
     at com.prog.C.f(C.java:967) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
     at java.lang.Thread.run(Thread.java:619) 
Caused by: java.util.NoSuchElementException 
     at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:808) 
     at org.apache.commons.dbcp.PoolingConnection.prepareStatement(PoolingConnection.java:107) 
     ... 15 more 

数据源配置:

<bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close" lazy-init="true" scope="singleton"> 
     <property name="driverClassName" value="${jdbc.driver.class}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
     <property name="poolPreparedStatements" value="true"/> 
     <property name="maxOpenPreparedStatements" value="20"/> 
    </bean> 

有百达可用的连接。我该如何解决它?谢谢。

回答

1

这意味着你可能没有正确关闭资源。您应该在您创建方法的范围内的最后一个块中执行此操作。

1

您确实已准备好未正确关闭的语句。内存转储应该可以帮助您找到这些内容。

0

请尝试以下配置文件中:

db.pool.statements.enable=false