Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 Spring连接池配置_Java_Spring_Connection Pooling_Apache Commons Dbcp - Fatal编程技术网

Java Spring连接池配置

Java Spring连接池配置,java,spring,connection-pooling,apache-commons-dbcp,Java,Spring,Connection Pooling,Apache Commons Dbcp,我已经在网络上搜索了一段时间,但尚未解决此问题: 我有以下数据源配置: <bean id="cpms.prod.ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>

我已经在网络上搜索了一段时间,但尚未解决此问题:

我有以下数据源配置:

 <bean id="cpms.prod.ds"  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
    <property name="url"><value>jdbc:mysql://localhost/mysql</value></property>
    <property name="username"><value>test</value></property>
    <property name="password"><value>test</value></property>
    <property name="initialSize" value="1" />
    <property name="maxActive" value="2" />
    <property name="maxIdle" value="1"></property>
 </bean>
这将强制废弃的连接过程运行并清理旧连接

我不应该干预这些参数,尤其不要将它们设置得太低,因为这样可能会有性能问题


我还尝试了显示出相同效果的解决方案,直到我将NevictionRunsmillis和MinevictableIDletimellis之间的时间更改为较低的值。而且它仍然没有将连接限制为2。

JdbcTemplate中的所有连接都是通过。你所看到的可能是由于大脑中的“智能”

从API:

当调用getConnection()且以下条件成立时,将识别并删除放弃的连接

  • getRemoveBandoned()=true
  • getNumActive()>getMaxActive()-3
  • getNumIdle()<2

数据源似乎允许比指定的最大活动连接数多3个活动连接。

明显的健全性检查-您的JDBCTemplate实际使用
cpms.prod.ds
作为数据源,对吗?是的,它是唯一可用的数据源apache common dbcp使用的版本是什么?早期版本中的minIdle 0存在问题,无法重现该问题。我针对commons dbcp 1.4、mysql connector java 5.1.25和mysql 5.1.44测试了您的dbcp设置,并实现了所需的行为。我使用
selectbenchmark(5000000,md5('test'))
来模拟长时间运行的查询。一个怀疑是你在某处有重复的连接池
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="1"/>

<property name="minIdle" value="0"></property>
<property name="timeBetweenEvictionRunsMillis" value="1000"></property>
<property name="minEvictableIdleTimeMillis" value="1000"></property>