数据库连接死锁

时间:2013-04-13 22:36:21

标签: spring ibatis spring-3

我们有一个运行良好多年的Web应用程序。 Web应用程序使用的是mysql,spring-1.2.6和ibatis。

用spring-3.2.0替换spring-1.2.6后,我们开始注意到一个问题,即由于某种原因,对特定页面的多个并发请求总是挂起。

jConsole为每个并发线程显示以下内容:

   java.lang.Thread.State: WAITING on 
   org.apache.commons.pool.impl.GenericObjectPool$Latch@b6b09e
   at java.lang.Object.wait(Native Method)
   at java.lang.Object.wait(Object.java:485)
   at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)

经过调查,我们发现这个问题与resultMap有关,如下所示。对于spring-1.2.6,每个线程只需要一个连接,而不管结果集中的行数是多少。但是,对于spring-3.2.0,每个线程需要N + 1个连接(取决于返回的行数)。因此陷入僵局。 (我们在配置中使用maxActive属性的默认值(8)。)

如何修复它以便在这种情况下重用连接?感谢。

<resultMap id="resultBlog" type="Blog">
    <id property="id" column="idBlog" />
    <result property="name" column="blogname" />
    <result property="url" column="blogurl" />
    <result property="author" column="idBlog" select="selectAuthor" />
</resultMap>

0 个答案:

没有答案