【发布时间】:2015-09-23 09:49:15
【问题描述】:
我在我的应用程序中使用 c3p0 与 Oracle 数据库进行 Hibernate 连接。我们有两台服务器并行运行。通常可以正常工作,但是在尝试通过 c3p0 连接到数据库时重新启动其中一台服务器后出现异常。抛出的根异常是
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
... 53 more
再次重新启动后,服务器运行正常。我正在使用hibernate-c3p0-4.3.6.Final。
这是我的 c3p0 连接配置
<bean id="dataSource"
class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
<property name="driverClass" value="oracle.jdbc.OracleDriver" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="50"/>
<property name="initialPoolSize" value="2"/>
<property name="minPoolSize" value="1"/>
<property name="maxStatements" value="200"/>
<property name="maxIdleTime" value="300"/>
<property name="acquireIncrement" value="10"/>
<property name="unreturnedConnectionTimeout" value="90"/>
<property name="maxConnectionAge" value="120"/>
</bean>
有没有人经历过类似的行为?
【问题讨论】:
-
你能发布用于将属性分配给hibernate的属性文件吗??你在哪里有 jdbc.url.. 还有你用的是什么驱动程序??
-
这听起来像是在 Oracle 中设置了最大连接限制,并且已被违反,因此没有人获得任何新连接