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是一个流行的Java应用程序框架,提供了强大的依赖注入功能;Mybatis是一个简单易用的持久...
原创资源,码超所值,价廉物美。...所用的技术比较多,如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) 使用bonecp作为数据库连接池工具 下载后可以运行,有例子,使用freemarker模板展示。
本篇文章将深入探讨DBCP(Database Connection Pool)、C3P0和BoneCP这三种常用的Java数据库连接池的参数配置,以帮助开发者优化数据库访问。 ### DBCP连接池参数说明 DBCP是Apache Commons库的一部分,它提供了...
本篇文章将详细讲解如何在Spring应用中配置JPA,并使用BoneCP作为数据源。 BoneCP是一款高效的、开源的数据库连接池,它能显著提高数据库操作性能。 首先,我们需要理解Spring与JPA的关系。Spring是企业级Java应用...
在这个项目中,我们结合了SpringMVC作为控制层,Mybatis作为持久层框架,同时使用Maven进行依赖管理,Bonecp作为数据库连接池,EclipseSTS作为开发环境,MapperScannerConfigurer则是Mybatis的一种配置方式。...
4. **高效的连接分配算法**: BoneCP采用了一种优化的分配策略,确保在高并发环境下也能快速获取到连接。 接下来,我们将讲解如何配置BoneCP。在Java项目中,通常会通过`bonecp.properties`配置文件来设定参数,...
连接池使用bonecp,中间加了一个检测页面URL合法性的filter,里面可以增加session检测等,适用于此框架的初学者(因只是通过一个登陆页面将框架构建出来) 注意:这个是在myeclipse10,j2ee6环境下建的,其他环境下不知道...
在Java开发中,Spring框架和Hibernate是两个非常重要的组件,分别用于依赖注入和对象关系映射。BoneCP是一个高效的数据库连接池,它提高了应用程序在处理数据库连接时的性能和效率。下面将详细介绍如何在Spring中...
在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...
Struts、Spring 和 iBatis 是三个非常重要的 Java Web 开发框架,它们分别在不同的层面上解决了应用程序的设计和实现问题。Struts 主要用于 MVC(Model-View-Controller)架构,提供控制器层的支持;Spring 是一个...
1. **添加依赖**:在项目中引入BoneCP的jar包,文件名为"BoneCP(连接oracle例子+jar包)",通常包括bonecp.jar、slf4j-api.jar和slf4j-log4j12.jar等,确保这些库文件在类路径中可用。 2. **配置 BoneCP**:在项目中...
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 是一个高性能的 JDBC 连接池,它在 Java 应用中被广泛使用,以提高数据库连接的效率和管理。在这个压缩包中,包含了 BoneCP 的所有必需的 JAR 包,以及一个连接示例(demo),帮助开发者快速理解和使用 ...
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
2. **线程安全**:它设计为线程安全,每个请求都能获取到独立的数据库连接,无需担心并发问题。 3. **高并发支持**:BoneCP优化了连接分配策略,能较好地处理高并发场景。 4. **细粒度控制**:提供丰富的配置参数,...
在配置 BoneCP 与 Spring 的集成时,你需要在Spring的配置文件中定义一个名为“dataSource”的bean,其类型为“com.jolbox.bonecp.BoneCPDataSource”。这个bean包含了连接池的各种配置属性,例如: 1. `driver...
然后,我们通过`getBean`方法获取名为`boneCPDataSource`的数据源对象,该对象已经被Spring根据XML配置初始化。接着,我们可以使用这个数据源获取数据库连接,执行SQL语句,最后关闭连接和应用上下文。 总结起来,...
1. **线程安全**:BoneCP采用预分配的连接策略,确保每个线程都可以快速获取到已建立的数据库连接,避免了传统连接池中的锁竞争问题。 2. **高效性能**:通过池化和重用数据库连接,减少创建和销毁连接的开销,从而...
1. 连接池初始化:在应用启动时,BoneCP会根据配置参数预先创建一定数量的数据库连接并放入池中。这些参数包括最小连接数、最大连接数、连接超时时间等。 2. 连接管理:BoneCP通过线程安全的数据结构(如...