该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-10
在测试机上内部运行测试一段时间后,会报cannot open connection 错误,经分析,应该是并发连接数量不够用的缘故,觉得可能是apache的dbcp有问题,明天准备用websphere的连接池更换再试试。 但疑惑的是,我对数据库操作,都是通过spring 的hibernateTemplate来操作的,hibernateTemplate封装了对链接的关闭操作,事务用的是声明式事务,如果事务配置正确,则会在执行完事务后关闭链接;如果事务配置不正确,则会在执行完数据库操作之后关闭链接,更不存在事务问题,怎么会出现链接不够用的情况呢???如果是dbcp的问题,那使用spring+hibernate是否就不能用tomcat做应用服务器呢,因为tomcat的连接池用的就是dbcp啊?? 不知道哪位朋友遇到过这种问题并解决了这种问题,因为我在网上找到的都只是有人提出了这个问题,但是没有人能给出个解决方案,希望不吝赐教。 由于是测试机,所以在项目出现cannot open connection 错误,用户几分钟不做任何操作后,又可以重新操作,说明是连接池在达到了maxWait之后收回了connection,用户再操作时能够重新分配到connection,说明cannot open connection 错误的确是链接数量达到了连接池的maxActive所导致。 不知道有哪位朋友可以赐教这个问题,非常感谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-10
能把具体的错误信息贴出来吗?
试试用webshpere来配置数据源。 |
|
返回顶楼 | |
发表时间:2007-05-10
以我的经验,应当是连接池的配置问题。可以将你的连接配置拿出来看一下。
|
|
返回顶楼 | |
发表时间:2007-05-11
没关闭连接?关闭事务?
|
|
返回顶楼 | |
发表时间:2007-05-11
数据源的配置如下
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.ibm.db2.jcc.DB2Driver</value> </property> <property name="url"> <value>*****</value> </property> <property name="username"> <value>****</value> </property> <property name="password"> <value>****</value> </property> <property name="initialSize"> <value>5</value> </property> <property name="maxIdle"> <value>2</value> </property> <property name="minIdle"> <value>1</value> </property> <property name="maxActive"> <value>5</value> </property> <property name="removeAbandoned"> <value>true</value> </property> <property name="removeAbandonedTimeout"> <value>1800</value> </property> <property name="maxWait"> <value>2000</value> </property> </bean> |
|
返回顶楼 | |
发表时间:2007-05-11
“<property name="maxIdle">
<value>2</value> </property> <property name="maxActive"> <value>5</value> ”是不是数量太少?加大点试试? |
|
返回顶楼 | |
发表时间:2007-05-11
肯定是连接池最大连接数太小了。
|
|
返回顶楼 | |
发表时间:2007-05-11
连接池最大连接数太小,且每次取得连接的数量也太少了。这不适合于企业级的应用。
|
|
返回顶楼 | |
发表时间:2007-05-11
真是太有人才了,虽然尚未验证正确与否,但是觉得大家说得很有道理。顺便学习一下这几个连接池的参数
maxActive="100" <!--最大活跃连接数,这里取值为100,表示同时最多有100个数据库连接。设为0表示无限制。--> maxIdle="30" <!--最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制。--> maxWait="10000" <!--最大建立连接等待时间。如果超过此时间将接到异常。这里设置为10000,表示10秒后超时。设为-1表示无限制,直到超时为止。--> 如果最大数据库活跃连接数过大,可想而知,内存占用量是非常惊人的!如果空闲连接数过大,则资源利用率低,连接池长期未释放,可导致连接池结点异常。所以选好maxActive和maxIdle是连接池性能的关键因素,当然这取决于服务器环境。 |
|
返回顶楼 | |
发表时间:2007-05-11
以前用dbcp 出现过类似的问题, 感觉Connection没有释放. 后来用C3P0问题解决
|
|
返回顶楼 | |