无法打开连接

3
我正在开发一个负载很高的应用程序。在我的应用程序中,我使用了以下技术:
  1. Jpa/Hibernate作为持久层
  2. Spring和Spring Dao
  3. C3p0作为连接池
我的问题是:当请求数量增加时,运行我的应用程序会在持久层中抛出异常,提示“无法打开连接”。我增加了Oracle的最大会话数,但问题并没有解决。我深入研究了C3p0文档并测试了其选项,但问题仍未解决。
谢谢您的关注。

我很难理解这个问题。您介意编辑一下,并添加所有重要信息(连接池设置、Oracle配置限制等),以便有足够的清晰度吗? - Vineet Reynolds
我的c3p0设置如下: initialPoolSize = 5 minPoolSize = 5 maxPoolSize = 100 maxIdleTime = 30000 unreturnedConnectionTimeout = 90 propertyCycle = 60 acquireRetryDelay = 1000 maxConnectionAge = 0 acquireIncrement = 1 acquireRetryAttempts = 0当然,我已经尝试了几个值和其他选项来测试C3p0,但没有改变。 - Sam
你能发布一个完整的堆栈跟踪吗?可能是因为你在某种情况下泄漏了连接(虽然使用Hibernate不太可能),导致打开了太多的连接,或者可能是由于其他原因突然无法访问数据库(也许是某些东西正在关闭它)。 - Pace
由于:javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法打开连接 由于:org.hibernate.exception.GenericJDBCException:无法打开连接 由于:java.sql.SQLException:客户端尝试检出连接已超时。 由于:com.mchange.v2.resourcepool.TimeoutException:客户端在等待从com.mchange.v2.resourcepool.BasicResourcePool@10241ae获取资源时超时 - 在awaitAvailable()处超时。 - Sam
2个回答

3

您在Oracle上增加了最大会话数,但没有增加连接池的最大大小。异常提示您的连接池已用尽。要么找到持有连接的原因并尽早释放它们,要么增加池中最大活动连接数。


0

你能否发布一下你的DataSource的Spring配置呢?我期望看到类似这样的内容:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
  <property name="jdbcUrl" value="${jdbc.connection.url}"/>
  <property name="user" value="${jdbc.connection.username}"/>
  <property name="password" value="${jdbc.connection.password}"/>
  <property name="initialPoolSize" value="5"/> 
  <property name="minPoolSize" value="5"/>
  <property name="maxPoolSize" value="100"/>
</bean>

使用另一个已配置的bean,其中dataSource是通过引用传递的:

<bean id="mySampleDao" class="com.example.dao.MySampleDao">
  <property name="dataSource" ref="dataSource" />
</bean>

这是你所拥有的吗?

你使用的Oracle版本是什么?


是的,我有上述配置。我正在使用 Oracle 11g - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接