2010-08-05 1 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 

Datasource конфигурации:

<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