2011-06-20 141 views
4

我开发一个非常负载(请求)的应用程序。 我曾经在我的appliation以下技术:无法打开连接

  1. JPA/Hibernate作为persistense层
  2. 春春道
  3. C3P0作为连接池

我的问题是:我跑我的应用程序,当请求数增加时,抛出异常在“不能打开连接”的 附加层 我增加oracle max session但是我的问题没有解决 我在C3p0 doc中检测并且测试它的选项,但是我的问题没有解决。

感谢您的关注

+0

我很难理解这个问题。你介意编辑它,并且将所有重要信息(连接池设置,甲骨文轮廓限制等),以便有足够的清晰度? –

+0

我C3P0设置为:\t \t initialPoolSize = 5 了MinPoolSize = 5 maxPoolSize = 100 maxIdleTime = 30000 unreturnedConnectionTimeout = 90 propertyCycle = 60 acquireRetryDelay = 1000 maxConnectionAge = 0 acquireIncrement = 1个 acquireRetryAttempts = 0 当然 我测试C3p0几个值和其他选项,但不改变。 – MJM

+0

你可以发布一个完整的堆栈跟踪?这可能是因为你有太多打开的连接,因为你不知何故泄漏连接(不太可能与Hibernate),或者它可能是你突然因为某些其他原因访问数据库(或许真的是将其关闭) – Pace

回答

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,其中数据源是通过引用传递:

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

这是你有什么?

您使用的是哪个版本的Oracle?

+0

超时是,我有上述结构。我正在使用'Oracle 11g'。 – MJM