paulwong

S2SH链接不关闭

一套S2SH的应用,现用单线程,连续发1000个请求,用的DBCP链接池,结果报数据库链接不够用:

ERROR [org.hibernate.util.JDBCExceptionReporter] - Cannot get a connection, pool error Timeout waiting for idle object

在JAVA加上LOG:
log.info("active: " + dataSource.getNumActive() + " (max: "
                + dataSource.getMaxActive() + ")   " + "idle: " + dataSource.getNumIdle()
                + "(max: " + dataSource.getMaxIdle() + ")");

结果显示为:
active: 25 (max: 100)   idle: 0(max: 30)

active的数量一直增加,但idle的数量一直为0。当程序向链接池要链接的时候,如果池没有,就会新建一个,active数就会加1,关闭链接后,链接会返回池,idle数加1。idle为0则表示池里没有链接。

这样说明链接一直在创建,没有关闭放回池里。但链接是由SPRING和HIBERNATE管理的,代码中没有关闭链接的语句。之后试了N多配置,都还没解决,如增加maxActive数等。最后,加上这一行,问题才终于解决:

<prop key="hibernate.connection.release_mode">after_transaction</prop>

这里默认值是auto,如果是用JTA事务才适用,如果是JDBC事务,就只能用after_transaction。

这样每次事务结束后,就会关闭链接返回链接池。

posted on 2013-06-07 15:09 paulwong 阅读(404) 评论(0)  编辑  收藏 所属分类: HIBERNATESPRING


只有注册用户登录后才能发表评论。


网站导航: