2012-05-29 2 views
0

Пробовал следовать шаблону на примерах apache dbcp, я понимаю все, кроме того, откуда и откуда возникают свойства базы данных и в которых компонент должен быть помещен в контексте приложения.Конфигурирование apache dbcp PoolingDataSource с Spring

Вместо этого я использовал источник данных Spring, но, как я помню, я настроил его в спешке, и я помню, что у меня возникли трудности с настройкой исходного источника данных, предоставленного самим apache dbcp. Поэтому у меня есть время, чтобы столкнуться с проблемой и выполнить первоначальное намерение использовать PoolingDataSource.

Причина, по которой я использовал реализацию Spring, заключается в том, что она предоставляет средства для настройки параметров для подключения к базе данных.

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

потому что я мазохист. :-) Если серьезно, я один из тех разработчиков, которые предпочитают понимать, что происходит. Конфигурирование одного компонента со всеми необходимыми параметрами - это магические алибабы. То же самое было с весной, пока не поняли, почему, зачем и что вводится, и зачем использовать DI - не только слепо стрелять @Autowired и побежать. :-) Еще бы, если бы вы могли помочь мне заполнить код, я был бы очень доволен. И мой вариант использования не заботится о его текущем состоянии, я вообще использую объединение. – Aubergine

+0

Странно, вы не только мазохист такого рода: http://numberformat.wordpress.com/2009/11/11/configuring-a-connection-pool-in-spring-using-dbcp/ –

ответ

0

Вы можете сконфигурировать, как показано ниже:

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

Ortherwise, я думаю, вы должны просто использовать BacsicDataSource, вы можете сконфигурировать количество соединений в пуле с помощью «initialSize» и «maxActive»:

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