繁体   English   中英

Spring连接池配置

[英]Spring connection pooling configurations

我已经在网上搜索了一段时间了,我还没有解决这个问题:

我有以下数据源配置:

 <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>

这应该足以确保一个点上只有2个活动连接,并且这些连接是用于池的连接。

在我的java代码中我使用SimpleJdbcTemplate来做三个查询,并且据我所知,这个对象应该在每个查询结束后返回到池的连接,也应该阻止第三个查询,而其中一个查询结束。

查看我的数据库管理控制台时,我看到3个连接出现,然后更改为睡眠状态。 如果我再次运行查询,我会看到另外3个连接弹出,另外3个保持在那里。

我发现关闭连接的唯一方法是设置:

<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>

这会强制废弃的连接过程运行并清理旧连接。

我不应该干涉这些参数,特别是不要将它们设置得太低,因为它可能会出现性能问题。

我也尝试了这里显示的解决方案,直到我将timeBetweenEvictionRunsMillisminEvictableIdleTimeMillis更改为较低的值。 并且它仍然不会将连接限制为2。

JdbcTemplate中的所有连接都是通过DataSourceUtils.doGetConnection 您所看到的可能是由于BasicDataSource中的“智能”

来自API:

Abandonded connections are identified and removed when getConnection() is invoked and the following conditions hold

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

数据源似乎允许比指定的max-active多3个活动连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM