2012-05-29 4 views
0

아파치 dbcp 예제에서 패턴을 따르려고했는데, 데이터베이스 속성의 출처 및 위치와 애플리케이션 컨텍스트에 배치해야하는 빈을 제외한 모든 것을 이해합니다.스프링으로 아파치 dbcp PoolingDataSource 설정하기

대신 스프링 데이터 소스를 사용했지만, 나는 그것을 바쁘게 설정했고 아파치 dbcp 자체가 제공 한 원래의 데이터 소스를 설정하는 데 어려움이 있음을 기억합니다. 그래서 나는 문제를 직시하고 PoolingDataSource 사용의 원래 의도를 성취 할 수있는 시간을 갖습니다.

스프링 구현을 사용한 이유는 데이터베이스에 연결하기위한 매개 변수 설정 방법을 제공하기 때문입니다.

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/datasource/DriverManagerDataSource.html

http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/PoolingDataSource.html

에 따르면 URL 또는로드 드라이버와 같은 구성을 채우는 할 방법이 없습니다.

개체 풀 등을 통해 추적하려고 시도했지만 실제로 손실되었습니다.

회신 : 예, 저는 apache basicDataSource를 사용하고 싶지 않습니다.

이제 문제로 돌아가서 매개 변수를 가져올 위치를 실제로 이해할 수 없습니까? 운전사? URL? 연결 팩토리에 url, pw 및 username이 설정되어있는 것으로 보입니다. 하지만 어디에로드 될 postgresql 드라이버를 가져올 수 있습니까?

구성을 완료하는 데 도움을주십시오.

나는 우리가 처음 두에 관심이 생각

<!-- the one I want to use now --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.PoolingDataSource"> 
    <constructor-arg><ref bean="pool"/></constructor-arg> 
    </bean> 

<!-- the one I used before as a workaround 

<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.postgresql.Driver"/> 
    <property name="url" value="jdbc:postgresql:postgres"/> 
    <property name="username" value="magicUserName"/> 
    <property name="password" value="magicPassword"/> 
</bean> --> 

<bean id="pool" class="org.apache.commons.pool.impl.GenericObjectPool"> 
    <property name="minEvictableIdleTimeMillis"><value>300000</value </property> 
    <property name="timeBetweenEvictionRunsMillis"><value>60000</value </property> 
</bean> 

<bean id="dsConnectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory"> 
    <constructor-arg><ref bean="dataSource"/></constructor-arg> 
</bean> 

<bean id="poolableConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory"> 
    <constructor-arg index="0"><ref bean="dsConnectionFactory"/ </constructor-arg> 
    <constructor-arg index="1"><ref bean="pool"/></constructor-arg> 
    <constructor-arg index="2"><null/></constructor-arg> 
    <constructor-arg index="3"><null/></constructor-arg> 
    <constructor-arg index="4"><value>false</value></constructor-arg> 
    <constructor-arg index="5"><value>true</value></constructor-arg> 
</bean> 



<bean id="txManager" 
     class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

<tx:annotation-driven transaction-manager="txManager" /> 

</beans> 

을 (구성을 위해 스프링을 사용),하지만 난 단지의 경우 모든 것을 포함. http://forum.springsource.org/showthread.php?10772-How-do-I-create-a-org-apache-commons-dbcp-PoolableConnection

+1

가 * 내가 아파치 BasicDataSource의를 사용하지 않을 * - 왜? 당신의 유스 케이스는 무엇입니까? –

+0

나는 매저 키스트이기 때문에. :-) 만약 내가 심각하게 생각한다면, 나는 진행되고있는 일을 이해하기를 좋아하는 이상한 개발자 중 한 명이다. 필요한 모든 매개 변수를 사용하여 단일 bean을 구성하는 것은 마법의 alibaba dark deeds입니다. 왜 그리고 왜 주사를 맞았는지 이해할 때까지 봄과 마찬가지 였고, DI를 사용하면 왜 맹목적으로 @Autowired를 해고하지 않고 승리를 위해 뛰었 을까요? :-) 코드 작성을 도울 수 있다면 여전히 행복 할 것입니다. 내 유스 케이스는 풀링을 전혀 사용하지 않는지 여부를 현 상태에서 돌 보지 않습니다. – Aubergine

+0

이상하게도, 당신은 그런 종류의 매저 키스트 일뿐입니다 : http://numberformat.wordpress.com/2009/11/11/configuring-a-connection-pool-in-spring-using-dbcp/ –

답변

0

당신은 다음과 같이 config (설정) 할 수 있습니다 :

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="url" value="<put database connection url here>" /> 
    <property name="username" value="XXXXXX" /> 
    <property name="password" value="XXXXXXXX" /> 
    <property name="driverClassName" value="<database driver here>" /> 
</bean> 

<bean id="pool" class="org.apache.commons.pool.impl.GenericObjectPool"> 
    <property name="minEvictableIdleTimeMillis"><value>300000</value></property> 
    <property name="timeBetweenEvictionRunsMillis"><value>60000</value></property> 
</bean> 

<bean id="dsConnectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory"> 
    <constructor-arg><ref bean="dataSource"/></constructor-arg> 
</bean> 

<bean id="poolableConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory"> 
    <constructor-arg index="0"><ref bean="dsConnectionFactory"/></constructor-arg> 
    <constructor-arg index="1"><ref bean="pool"/></constructor-arg> 
    <constructor-arg index="2"><null/></constructor-arg> 
    <constructor-arg index="3"><null/></constructor-arg> 
    <constructor-arg index="4"><value>false</value></constructor-arg> 
    <constructor-arg index="5"><value>true</value></constructor-arg> 
</bean> 

<bean id="pooledDS" class="org.apache.commons.dbcp.PoolingDataSource" 
               depends-on="poolableConnectionFactory"> 
    <constructor-arg><ref bean="pool"/></constructor-arg> 
</bean> 

그리고 당신은 "pooledDS"(PoolingDataSource) 같은 어떤 orther 데이터 소스를 사용할 수 있습니다

이 해결 방법을 사용하여 많은 사람들이있는 것 같다.

Ortherwise, 난 여전히 "initialSize가"와 "maxActive"에 의해 풀에있는 연결의 수를 config (설정) 할 수 있습니다, 당신은 단순히 BacsicDataSource를 사용한다고 생각 :

<bean id="basicDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
     <property name="removeAbandoned" value="true"/> 
     <property name="initialSize" value="10" /> 
     <property name="maxActive" value="50" /> 
    </bean> 
관련 문제