`

Spring+BoneCP+MyBatis: maxConnectionsPerPartition为1导致的junit一直停留在获取conn阶段的问题

阅读更多

Spring+BoneCP+MyBatis下, 如果applicationcontex.xml中的boneCP datasource 最大连接数maxConnectionsPerPartition设为1且partitionCount也为1:
  <bean id="dataSourceNewsletter" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
    <property name="driverClass" value="#{env['jdbc.driverClassName']}"/>
    <property name="jdbcUrl" value="#{env['jdbc.url.newsletter']}"/>
    <property name="username" value="#{env['jdbc.username']}"/>
    <property name="password" value="#{env['jdbc.password']}"/>
    <property name="idleConnectionTestPeriod" value="60"/>
    <property name="maxConnectionsPerPartition" value="1"/>
    <property name="minConnectionsPerPartition" value="1"/>
    <property name="partitionCount" value="1"/>
    <property name="acquireIncrement" value="1"/>
    <property name="statementsCacheSize" value="100"/>
    <property name="releaseHelperThreads" value="3"/>
  </bean>

则junit单元测试时无法获取到这个唯一的connection,单元测试将会一直停留在下面的“Fetching JDBC Connection from DataSource”:
引用
INFO 00:05:08 (SQLErrorCodesFactory.java:126) - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
DEBUG 00:05:08 (SQLErrorCodesFactory.java:199) - Looking up default SQLErrorCodes for DataSource [JDBC URL = jdbc:postgresql://mxa.tianyu.com:5432/zhoukan, Username = www-data, partitions = 1, max (per partition) = 1, min (per partition) = 1, helper threads = 3, idle max age = 60 min, idle test period = 60 min]
DEBUG 00:05:08 (DataSourceUtils.java:110) - Fetching JDBC Connection from DataSource
上面log的前提是已打开相应包的log4j日志跟踪:
log4j.logger.org.mybatis=DEBUG
log4j.logger.org.springframework=DEBUG
log4j.logger.com.jolbox.bonecp=DEBUG



解决办法:将最大连接数maxConnectionsPerPartition设为>1
  <bean id="dataSourceNewsletter" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
    ...
    <property name="maxConnectionsPerPartition" value="3"/>
    ...
  </bean>
这只是一个让单元测试能够进行下去的临时解决之道;真正的问题在于,仅有的一个connection为什么一直被占用,代码里哪里的不规范导致该connection一直得不到释放致使单元测试一直停留在“获取数据库连接...”阶段,而无法继续run下去?


后期说明:这不是个问题或bug;根本的原因还是因为conn只有一个,太少,而在复杂的业务操作代码中有多线程的多个Dao调用。连接被某个Dao调用占用了。当然,如果conn被长时间的占用,导致测试代码一直停留无法执行下去,就需要去查找可能存在的数据库死锁问题。


ref resources:
spring+ibatis 不打印错误信息:
http://blog.csdn.net/gaoshanwushui/article/details/5509845
分享到:
评论

相关推荐

    Spring+Mybatis+BoneCP配置实例

    在本文中,我们将深入探讨如何将Spring、Mybatis与BoneCP数据库连接池集成,并通过一个实际的配置案例来展示这一过程。Spring是一个流行的Java应用程序框架,提供了强大的依赖注入功能;Mybatis是一个简单易用的持久...

    spring+hibernate+JPA+BoneCP

    原创资源,码超所值,价廉物美。...所用的技术比较多,如Spring的IOC,AOP,Transactiion,Annotation,Spring_JUnit_Test及Log4j;Hibernate的JPA Annotation;BoneCP的数据库连接测等。是很好的学习资料!

    最新版SSH框架(spring3.1.2+hibernate4.1.4+struts2.3.4+bonecp0.7.1)

    最新版SSH框架(spring3.1.2+hibernate4.1.4+struts2.3.4+bonecp0.7.1) 使用bonecp作为数据库连接池工具 下载后可以运行,有例子,使用freemarker模板展示。

    DBCP+C3P0+BoneCP连接池参数说明

    本篇文章将深入探讨DBCP(Database Connection Pool)、C3P0和BoneCP这三种常用的Java数据库连接池的参数配置,以帮助开发者优化数据库访问。 ### DBCP连接池参数说明 DBCP是Apache Commons库的一部分,它提供了...

    各种数据源配置之Spring+JPA配置BoneCP数据源

    本篇文章将详细讲解如何在Spring应用中配置JPA,并使用BoneCP作为数据源。 BoneCP是一款高效的、开源的数据库连接池,它能显著提高数据库操作性能。 首先,我们需要理解Spring与JPA的关系。Spring是企业级Java应用...

    SpringMVC+Mybatis

    在这个项目中,我们结合了SpringMVC作为控制层,Mybatis作为持久层框架,同时使用Maven进行依赖管理,Bonecp作为数据库连接池,EclipseSTS作为开发环境,MapperScannerConfigurer则是Mybatis的一种配置方式。...

    BoneCp连接池详解及和Hibernate配置(当今最快的连接池)

    4. **高效的连接分配算法**: BoneCP采用了一种优化的分配策略,确保在高并发环境下也能快速获取到连接。 接下来,我们将讲解如何配置BoneCP。在Java项目中,通常会通过`bonecp.properties`配置文件来设定参数,...

    springMVC+srping3.2+hibernate4.2+bonecp登陆示例

    连接池使用bonecp,中间加了一个检测页面URL合法性的filter,里面可以增加session检测等,适用于此框架的初学者(因只是通过一个登陆页面将框架构建出来) 注意:这个是在myeclipse10,j2ee6环境下建的,其他环境下不知道...

    spring hibernate BoneCP設定

    在Java开发中,Spring框架和Hibernate是两个非常重要的组件,分别用于依赖注入和对象关系映射。BoneCP是一个高效的数据库连接池,它提高了应用程序在处理数据库连接时的性能和效率。下面将详细介绍如何在Spring中...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    struts_spring_ibatis_bonecp

    Struts、Spring 和 iBatis 是三个非常重要的 Java Web 开发框架,它们分别在不同的层面上解决了应用程序的设计和实现问题。Struts 主要用于 MVC(Model-View-Controller)架构,提供控制器层的支持;Spring 是一个...

    BoneCP(连接oracle例子+jar包)

    1. **添加依赖**:在项目中引入BoneCP的jar包,文件名为"BoneCP(连接oracle例子+jar包)",通常包括bonecp.jar、slf4j-api.jar和slf4j-log4j12.jar等,确保这些库文件在类路径中可用。 2. **配置 BoneCP**:在项目中...

    Bonecp+Spring需要的jar包

    bonecp-0.7.1.RELEASE.jar bonecp-provider-0.7.0.jar google-collections-1.0.jar bonecp-spring-0.7.1.RELEASE.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar

    bonecp 相关所有jar包以及连接demo

    BoneCP 是一个高性能的 JDBC 连接池,它在 Java 应用中被广泛使用,以提高数据库连接的效率和管理。在这个压缩包中,包含了 BoneCP 的所有必需的 JAR 包,以及一个连接示例(demo),帮助开发者快速理解和使用 ...

    Bonecp+Spring需要的jar包 0.7+0.8

    bonecp-0.7.1.RELEASE.jar bonecp-provider-0.7.0.jar google-collections-1.0.jar bonecp-spring-0.7.1.RELEASE.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar

    BoneCP连接池和Ehcache注解缓存整合到Spring

    2. **线程安全**:它设计为线程安全,每个请求都能获取到独立的数据库连接,无需担心并发问题。 3. **高并发支持**:BoneCP优化了连接分配策略,能较好地处理高并发场景。 4. **细粒度控制**:提供丰富的配置参数,...

    BoneCP数据源应用

    在配置 BoneCP 与 Spring 的集成时,你需要在Spring的配置文件中定义一个名为“dataSource”的bean,其类型为“com.jolbox.bonecp.BoneCPDataSource”。这个bean包含了连接池的各种配置属性,例如: 1. `driver...

    BoneCP的xml使用实例

    然后,我们通过`getBean`方法获取名为`boneCPDataSource`的数据源对象,该对象已经被Spring根据XML配置初始化。接着,我们可以使用这个数据源获取数据库连接,执行SQL语句,最后关闭连接和应用上下文。 总结起来,...

    bonecp连接池demo

    1. **线程安全**:BoneCP采用预分配的连接策略,确保每个线程都可以快速获取到已建立的数据库连接,避免了传统连接池中的锁竞争问题。 2. **高效性能**:通过池化和重用数据库连接,减少创建和销毁连接的开销,从而...

    数据库连接池BoneCP源码分析报告

    1. 连接池初始化:在应用启动时,BoneCP会根据配置参数预先创建一定数量的数据库连接并放入池中。这些参数包括最小连接数、最大连接数、连接超时时间等。 2. 连接管理:BoneCP通过线程安全的数据结构(如...

Global site tag (gtag.js) - Google Analytics