【问题标题】:MaxOpenPreparedStatements limit reached达到 MaxOpenPreparedStatements 限制
【发布时间】:2011-03-25 21:10:15
【问题描述】:

在应用程序运行几天后,我的代码中的某些数据库更新才出现此异常。有些请求通过了,有些请求(相同的 java 代码)失败了。

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>

总是有可用的连接。我该如何解决?谢谢。

【问题讨论】:

    标签: java oracle jdbc apache-commons-dbcp


    【解决方案1】:

    您可以设置负值。设置负值会在缓存中创建无限的打开准备语句。

    【讨论】:

      【解决方案2】:

      请在您的配置文件中尝试以下操作:

      db.pool.statements.enable=false
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-05-10
            • 1970-01-01
            • 2019-10-20
            • 2021-04-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多