現在我已經在網上搜索了一段時間四周,我還沒有解決這個問題:彈簧連接池的配置
我有以下數據源配置:
<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>
迫使放棄了連接過程運行和清理舊的連接。
我不應該插手這些參數,特別是不要將它們設置得太低,因爲它可能會有性能問題。
我也試過here顯示的解決方案,直到我將timeBetweenEvictionRunsMillis
和minEvictableIdleTimeMillis
更改爲較低的值。並且它仍然不會將連接限制爲2.
明顯的完整性檢查 - 您的JDBCTemplate實際上使用'cpms.prod.ds'作爲數據源,對嗎? – AngerClown 2013-02-14 00:32:02
是的,它是唯一可用的數據源 – 2013-02-14 07:54:52
apache-common-dbcp使用的是哪個版本?早期版本中存在minIdle 0問題https://issues.apache.org/jira/browse/DBCP-379 – 2013-06-19 07:26:54