当前位置: 首页 > 知识库问答 >
问题:

使用Spring配置apache dbcp PoolgDataSource

时衡虑
2023-03-14

尝试遵循apache dbcp示例的模式,我了解所有内容,除了数据库属性如何以及从哪里来以及它们必须放在应用程序上下文中的哪个bean中。

我改用了Spring数据源,但我记得我很匆忙地配置了它,我记得在配置ApacheDBCP本身提供的原始数据源时遇到了困难。所以我正好有时间面对这个问题,并实现使用PoolgDataSource的初衷。

我使用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、pw和用户名是在连接工厂上设置的。但是从哪里获取要加载的postgresql驱动程序呢?

请帮助完成配置。

(使用spring进行配置

<!-- 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个答案

李和裕
2023-03-14

您可以按以下方式进行配置:

  <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”(PoolgDataSource)。

或者,我认为您应该简单地使用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>
 类似资料:
  • 问题内容: 我是Spring的新手,想将spring ioc连接到我的小型(测试)网络应用程序中。 我有这样的Servlet : 和我的web.xml: 而且我也有这样的Spring配置XML: 我有这样的问题: 我希望在servlet init()期间将requestHelper对象设置为我的servlet。但除了这个,它还给了我nullpointer。 我正在尝试从实现servlet ,将其写

  • 我的应用程序。yml: 在使用URL:http://localhost:8888/movie/default时,我在file:///e:/idea/spring-cloud-microservice-example-master/config-microservice/src/main/resources/configPath中发现错误:java.lang.IllegalStateExceptio

  • 这段配置通过上下文进行扫描--我用调试器检查了它。问题可能出在哪里?

  • 但是如果我让Spring Boot自动配置JOOQ,那么我应该把这个设置放在哪里呢? 基本的Spring Boot配置似乎只支持在中设置,如jooq-spring-boot-example所示。 我尝试将放入中,但这对SQL没有任何影响。 有没有办法自定义Spring boot JOOQ配置,而不必自己配置JOOQ? 我使用的是SpringBoot 2.1.7.Release和JOOQ 3.11.

  • 本文向大家介绍Spring Boot使用和配置Druid,包括了Spring Boot使用和配置Druid的使用技巧和注意事项,需要的朋友参考一下 1、引入依赖包 2、配置application.properties 3、目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池。 由于Druid暂时不在Spring Bootz中的直接支持,故需要

  • 我正试图用我的Spring boot应用程序配置Swagger UI。尽管似乎加载正确,但是不加载带注释的REST API。 这是我所拥有的: pom.xml: 昂首阔步。JAVA : 代码检查中的中的错误:。 我谷歌了一下(也尝试了网络配置mvc),但是错误仍然存在。也许我在. iml文件中丢失了一个资源引用?