【问题标题】:Set connection pool size for DBCP datasource in iBatis在 iBatis 中设置 DBCP 数据源的连接池大小
【发布时间】:2015-01-30 19:07:16
【问题描述】:

如何设置 DBCP 数据源的连接池大小?另外,默认的数据源是池化的吗?

我尝试设置maxTotal (http://commons.apache.org/proper/commons-dbcp/configuration.html),但它返回一个无效属性错误。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${db.driver}"/>
  <property name="url" value="${db.url}"/>
  <property name="username" value="${db.username}"/>
  <property name="password" value="${db.password}"/>
  <property name="poolPreparedStatements" value="false"/>
  <property name="testWhileIdle" value="true"/>
  <property name="testOnBorrow" value="true"/>
  <property name="validationQuery" value="SELECT 1 FROM DUAL"/>     
  <property name="timeBetweenEvictionRunsMillis" value="30000"/>
  <property name="maxTotal" value="1"/>     
</bean>


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class pat
h resource [META-INF/spring/base-gateway.xml]: Error setting property values; nested exception is org.springframework.be
ans.NotWritablePropertyException: Invalid property 'maxTotal' of bean class [org.apache.commons.dbcp.BasicDataSource]: B
ean property 'maxTotal' is not writable or has an invalid setter method. Does the parameter type of the setter match the
 return type of the getter?
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCap
ableBeanFactory.java:1361)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBea
nFactory.java:1086)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBea
nFactory.java:517)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanF
actory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.jav
a:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFac
tory.java:580)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationCo
ntext.java:895)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at sf.av.core.gateway.GenericGateway.main(GenericGateway.java:23)
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'maxTotal' of bean class [org.apache
.commons.dbcp.BasicDataSource]: Bean property 'maxTotal' is not writable or has an invalid setter method. Does the param
eter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1024)
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:900)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCap
ableBeanFactory.java:1358)
        ... 13 more 

【问题讨论】:

    标签: connection-pooling mybatis ibatis apache-commons-dbcp


    【解决方案1】:

    您使用的 DBCP jar 版本与配置文档for example 之间很可能不匹配:

    用户还应该知道,一些配置选项(例如 maxActive 到 maxTotal)已被重命名,以使其与 Commons Pool 2 使用的新名称保持一致。

    您正在使用的 jar 中的 BasicDataSource 类是否有 maxTotal 设置器?

    【讨论】:

    • 默认数据源是否池化?
    • @user640378: iBatis 的默认数据源? iBatis/myBatis 有three supported datasources out of the box:UNPOOLED、POOLED 和 JNDI。如果您使用 spring 使用 iBatis,并且您给 iBatis 一个数据源 bean,那么这将决定数据源是否是池化的。您正在使用池化的 org.apache.commons.dbcp.BasicDataSource。
    猜你喜欢
    • 2014-08-02
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2012-12-22
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多