는 지금 약간의 시간에 대한 웹 주위를 찾고있다 그리고 나는이 문제를 해결하기 위해 아직했습니다 :봄 연결 풀링 구성
을 나는 다음과 같은 데이터 소스 구성이 있습니다
<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>
.
이러한 매개 변수에 간섭 할 필요가 없으며 성능 문제가있을 수 있으므로 특히 낮게 설정하지 않아야합니다.
또한 timeBetweenEvictionRunsMillis
및 minEvictableIdleTimeMillis
을 낮은 값으로 변경할 때까지 here으로 표시된 해결 방법을 시도해 보았습니다. 그리고 여전히 연결을 2로 제한하지 않습니다.
명확한 정상 확인 - JDBCTemplate이 실제로 'cpms.prod.ds'를 데이터 소스로 사용하고 있습니까? 맞습니까? – AngerClown
예, 사용 가능한 유일한 데이터 소스입니다 –
어떤 버전의 apache-common-dbcp가 사용합니까? 초기 버전에서 minIdle 0에 문제가있었습니다. https://issues.apache.org/jira/browse/DBCP-379 –