我正在使用Spring 2.5;使用apache-commons-dbcp连接池的SimpleJdbcTemplate。还有一个线程池在运行查询时生成一个线程(执行几个查询并在完成所有操作后处理它们的结果,因此生成的线程并行运行查询)。
最终,所有线程都在TIMED_WAIT中等待getConnection()。没有线程似乎得到一个连接。我检查数据库,连接都是空闲的。
造成这种情况的原因是什么?我有10个连接作为最大池大小和50-100个线程。我该如何配置? DBA说这应该是足够的连接(我同意,因为它们都是空闲的)。
同样的事情也发生在BoneCP作为SimpleJdbcTemplate的数据源。
答案 0 :(得分:2)
原来这是因为在循环遍历ResultSet的过程中,又启动了另一个查询,因此有了足够的第一个查询,第二个查询无法获得连接而且所有内容都会死锁。