gpt4 book ai didi

java - Spring连接池配置

转载 作者:行者123 更新时间:2023-12-02 08:51:54 26 4
gpt4 key购买 nike

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

我有以下数据源配置:

 <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 个 Activity 连接,并且这些连接是用于池的。

在我的java代码中,我使用SimpleJdbcTemplate来做三个查询,据我了解,这个对象应该在每个查询结束后将连接返回到池中,也应该阻止第三个查询当其他一个结束时进行查询。

当查看我的数据库管理控制台时,我看到出现 3 个连接,然后更改为 sleep 状态。如果我再次运行查询,我会看到另外 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>

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

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

我也尝试过显示的解决方案 here达到相同的效果,直到我将 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

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

关于java - Spring连接池配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com