Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据库连接不足_Java_Spring_Connection Pooling_Apache Commons Dbcp_Bonecp - Fatal编程技术网

Java 数据库连接不足

Java 数据库连接不足,java,spring,connection-pooling,apache-commons-dbcp,bonecp,Java,Spring,Connection Pooling,Apache Commons Dbcp,Bonecp,我使用的是Spring2.5;使用apache commons dbcp连接池的SimpleJdbcTemplate。还有一个线程池,在运行查询时生成一个线程(执行多个查询并在所有查询完成后处理其结果,因此生成线程以并行运行查询) 最终,所有线程都在定时等待中等待getConnection()。似乎没有线程获得连接。我检查了数据库,所有连接都处于空闲状态 这是什么原因造成的?我有10个连接作为最大池大小和50-100个线程。我应该如何配置它?DBA说应该有足够的连接(我同意,因为它们都是空闲的)

我使用的是Spring2.5;使用apache commons dbcp连接池的SimpleJdbcTemplate。还有一个线程池,在运行查询时生成一个线程(执行多个查询并在所有查询完成后处理其结果,因此生成线程以并行运行查询)

最终,所有线程都在定时等待中等待getConnection()。似乎没有线程获得连接。我检查了数据库,所有连接都处于空闲状态

这是什么原因造成的?我有10个连接作为最大池大小和50-100个线程。我应该如何配置它?DBA说应该有足够的连接(我同意,因为它们都是空闲的)


同样的事情也发生在BoneCP作为SimuleDbcDead的数据源上。

证明这是因为在结果集循环期间,开始了另一个查询,因此有足够的第一个查询,第二个查询就不能得到连接和所有的死锁。您没有显式地关闭连接。我不认为OP没有关闭连接,因为他使用的

SimpleJdbcTemplate
能够正确地处理连接。然而,显然这将是第一件要尝试的事情。但您确定这些连接处于空闲状态吗?您有100个线程,只有10个连接。。。如果SQL查询占用了大部分线程时间,则保证90个线程等待连接,而其余10个线程实际运行查询(可能在
socketRead
上等待结果)。您确定所有线程都在等待吗?SimpleJdbcTemplate应该关闭它们。通过JConsole查看线程,是的,所有线程都在等待。完成查询平均不到500毫秒。我已经将它保留了15分钟,以确保它不是缓慢的查询,没有结果。您在池上设置了验证查询吗?数据库可能正在超时这些连接,而池对此一无所知吗?某种类型的
select 1
查询在这里是合适的。没有验证查询,所有连接都有效且正常工作。DBA确认,无论何时出现问题。在DB上,我们看到所有的连接都在建立,它们只是空闲的。