公司的内部服务器,一直是采用的tomcat,连接池也是采用的tomcat自带的dbcp.最近发现好象连接池的数据库连接只会增加,不会自动释 放.后来网上一查,很多人说这是dbcp的老毛病了,虽然基本不影响使用,但毕竟占用了数据库资源,因此,想测试一下其它连接池.首先找到有人推荐的 proxool,这个网上有详细的配置方式,一配就通了.但又在网上看到一个快速的连接池BoneCP,决定也测试一下.结果在 http://jolbox.com/ 和网上都只看到在spring下的配置方式.于是自己参照dbcp的方式和tomcat文档,弄了大半天,终于配置好了.整理一下,发出来,希望能给有类似需要的人一些参考.
1.环境:jdk1.6,tomcat6.0.20,bonecp-0.6.4
2.需要的包:google-collections-1.0.jar,slf4j-api-1.5.11.jar,slf4j-log4j12-1.5.11.jar,bonecp-0.6.4.jar
3.tomcat的配置方式:
<Resource
name="clientdb"
auth="Container"
type="com.jolbox.bonecp.BoneCPDataSource"
factory="org.apache.naming.factory.BeanFactory"
driverClass="oracle.jdbc.driver.OracleDriver"
username=" "
password=" "
jdbcUrl="jdbc:oracle:thin:@127.0.0.1:1521:DB"
idleConnectionTestPeriod="0"
idleMaxAge="10"
partitionCount="1"
maxConnectionsPerPartition="5"
minConnectionsPerPartition="1"
connectionTestStatement=""
initSQL="select 1 from dual"
/>
可以放到conf/server.xml文件的 <GlobalNamingResources>节,也可放到<context>中
4.使用方式:
和dbcp是一样的:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup(JNDIName);
con = ds.getConnection();
5.资源下载:
http://jolbox.com/bonecp/downloads/maven/com/jolbox/bonecp/0.6.4/bonecp-0.6.4.jar
http://google-collections.googlecode.com/files/google-collect-1.0.zip
http://www.slf4j.org/dist/slf4j-1.5.11.zip
BoneCP 参数详解:
========================================
一、BoneCP配置文件格式(bonecp-config.xml):
1 xml version="1.0" encoding="UTF-8"?>
2 <bonecp-config>
3 <default-config>
4
5 <property name="...">...property>
6 default-config>
7 bonecp-config>
二、BoneCP主要配置参数
1.jdbcUrl
设置数据库URL
2.username
设置数据库用户名
3.password
设置数据库密码
4.partitionCount
设置分区个数。这个参数默认为1,建议3-4(根据特定应用程序而定)。
为了减少锁竞争和改善性能,从当前线程分区(thread-affinity)中获取一个connection,
也就是这个样子:partitions[Thread.currentThread().getId() % partitionCount]。当拥有充足的短期(short-lived)的线程时候,这个参数设置越大,性能越好。当超过一定的阀值时,连接池的维护工作就可能对性能造成一定的负面影响(仅当分区上的connection使用耗尽时)。
5.maxConnectionsPerPartition
设置每个分区含有connection最大个数。这个参数默认为2。如果小于2,BoneCP将设置为50。
比如:partitionCount设置为3,maxConnectionPerPartition设置为5,你就会拥有总共15个connection。
注意:BoneCP不会将这些connection一起创建出来,而是说在需要更多connection的时候从minConnectionsPerPartition参数开始逐步地增长connection数量。
6.minConnectionsPerPartition
设置每个分区含有connection最大小个数。这个参数默认为0。
7.acquireIncrement
设置分区中的connection增长数量。这个参数默认为1。
当每个分区中的connection大约快用完时,BoneCP动态批量创建connection,
这个属性控制一起创建多少个connection(不会大于maxConnectionsPerPartition)。
注意:这个配置属于每个分区的设置。
8.poolAvailabilityThreshold
设置连接池阀值。这个参数默认为20。如果小于0或是大于100,BoneCP将设置为20。
连接池观察线程(PoolWatchThread)试图为每个分区维护一定数量的可用connection。
这 个数量趋于maxConnectionPerPartition和minConnectionPerPartition之间。这个参数是以百分比的形式来 计算的。例如:设置为20,下面的条件如果成立:Free Connections / MaxConnections < poolAvailabilityThreshold;就会创建出新的connection。
换句话来说连接池为每个分区至少维持20%数量的可用connection。
设置为0时,每当需要connection的时候,连接池就要重新创建新connection,这个时候可能导致应用程序可能会为了获得新connection而小等一会。
9.connectionTimeout
设置获取connection超时的时间。这个参数默认为Long.MAX_VALUE;单位:毫秒。
在调用getConnection获取connection时,获取时间超过了这个参数,就视为超时并报异常。
三、BoneCP线程配置参数
1.releaseHelperThreads
设置connection助手线程个数。这个参数默认为3。如果小于0,BoneCP将设置为3。
设置为0时,应用程序线程被阻塞,直到连接池执行必要地清除和回收connection,并使connection在其它线程可用。
设置大于0时,连接池在每个分区中创建助手线程处理回收关闭后的connection(应用程序会通过助手线程异步地将这个connection放置到一个临时队列中进行处理)。
对于应用程序在每个connection上处理大量工作时非常有用。可能会降低运行速度,不过在高并发的应用中会提高性能。
2.statementReleaseHelperThreads
设置statement助手线程个数。这个参数默认为3。如果小于0,BoneCP将设置为3。
设置为0时,应用程序线程被阻塞,直到连接池或JDBC驱动程序关闭statement。
设置大于0时,连接池会在每个分区中创建助理线程,异步地帮助应用程序关闭statement当应用程序打开了大量的statement是非常有用的。可能会降低运行速度,不过在高并发的应用中会提高性能。
3.maxConnectionAge
设置connection的存活时间。这个参数默认为0,单位:毫秒。设置为0该功能失效。
通过ConnectionMaxAgeThread观察每个分区中的connection,不管connection是否空闲,如果这个connection距离创建的时间大于这个参数就会被清除。当前正在使用的connection不受影响,直到返回到连接池再做处理。
4.idleMaxAge
设置connection的空闲存活时间。这个参数默认为60,单位:分钟。设置为0该功能失效。
通过ConnectionTesterThread观察每个分区中的connection,如果这个connection距离最后使用的时间大于这个参数就会被清除。
注意:这个参数仅和idleConnectionTestPeriod搭配使用,而且不要在这里设置任何挑衅的参数!
5.idleConnectionTestPeriod
设置测试connection的间隔时间。这个参数默认为240,单位:分钟。设置为0该功能失效。
通过ConnectionTesterThread观察每个分区中的connection, 如果这个connection距离最后使用的时间大于这个参数并且距离上一次测试的时间大于这个参数就会向数据库发送一条测试语句,如果执行失败则将这个connection清除。
注意:这个值仅和idleMaxAge搭配使用,而且不要在这里设置任何挑衅的参数!
三、BoneCP可选配置参数
1.acquireRetryAttempts
设置重新获取连接的次数。这个参数默认为5。
获取某个connection失败之后会多次尝试重新连接,如果在这几次还是失败则放弃。
2.acquireRetryDelay
设置重新获取连接的次数间隔时间。这个参数默认为7000,单位:毫秒。如果小于等于0,BoneCP将设置为1000。
获取connection失败之后再次尝试获取connection的间隔时间。
3.lazyInit
设置连接池初始化功能。这个参数默认为false。
设置为true,连接池将会初始化为空,直到获取第一个connection。
4.statementsCacheSize
设置statement缓存个数。这个参数默认为0。
5.disableJMX
设置是否关闭JMX功能。这个参数默认为false。
6.poolName
设置连接池名字。用于当作JMX和助手线程名字的后缀。
四、BoneCP调试配置参数
1.closeConnectionWatch
设置是开启connection关闭情况监视器功能。这个参数默认为false。
每当调用getConnection()时,都会创建CloseThreadMonitor,监视connection有没有关闭或是关闭了两次。警告:这个参数对连接池性能有很大的负面影响,慎用!仅在调试阶段使用!
2.closeConnectionWatchTimeout
设置关闭connection监视器(CloseThreadMonitor)持续多长时间。这个参数默认为0;单位:毫秒。仅当closeConnectionWatch参数设置为可用时,设置这个参数才会起作用。
设置为0时,永远不关闭。
3.logStatementsEnabled
设置是否开启记录SQL语句功能。这个参数默认是false。
将执行的SQL记录到日志里面(包括参数值)。
4.queryExecuteTimeLimit
设置执行SQL的超时时间。这个参数默认为0;单位:毫秒。
当查询语句执行的时间超过这个参数,执行的情况就会被记录到日志中。
设置为0时,该功能失效。
5.disableConnectionTracking
设置是否关闭connection跟踪功能。这个参数默认为false。
设置为true,连接池则不会监控connection是否严格的关闭;设置为false,则启用跟踪功能(仅追踪通过Spring或一些事务管理等机制确保正确释放connection并放回到连接池中)。
6.transactionRecoveryEnabled
设置事务回放功能。这个参数默认为false。
设置为true时,MemorizeTransactionProxy可以记录所有在connection上操作的情况,当connetion操作失败的时候会自动回放先前的操作,如果在回放期间还是失败,则抛出异常。注意:这个功能会使连接池微弱地降低运行速度。
文献出自:http://www.cnblogs.com/xuekyo/archive/2012/03/15/2398367.html
相关推荐
本文将详细介绍如何配置 BoneCP 连接池,以及对比C3P0的配置方法。 1. **BoneCP的基本概念与优势** - BoneCP 是一个开源的JDBC连接池实现,它通过高效的连接管理和复用来提高数据库操作的效率。 - 与C3P0相比,...
- Tomcat JDBC Connection Pool:Tomcat服务器内置的连接池,轻量级且易于配置。 - BoneCP:另一个高性能的连接池,但已停止维护。 3. **配置步骤** - 添加依赖:首先,你需要在项目中引入相应的连接池库,例如...
例如,Tomcat、JBoss等应用服务器都支持JNDI配置C3P0、DBCP等连接池。 4. DBCP(Database Connection Pool): DBCP是Apache Commons的一个项目,基于Jakarta-pool实现的数据库连接池。它简单易用,但相比于C3P0和...
- 对于DBCP和Tomcat JDBC Pool等连接池,报告提供了详细的参数对比,帮助用户根据自身需求进行配置优化。 #### 五、结论与建议 通过综合评估,报告给出了以下建议: 1. **性能考量**:在需要高性能和稳定性的...
本文探讨了JAVA中的数据库连接池,首先提出了性能问题,然后针对该问题进行了调查,并找到 原因:是数据源配置引起的,进一歩对带连接池的数据源进行了总结。本文还提供了一个方向,并且对连接池的数据源配置进行了...
下面是一个使用Oracle数据库连接池的配置示例: ``` DriverClass=oracle.jdbc.OracleDriver DeregisterDriverOnClose=true MaxConnectionsPerPartition=30 MinConnectionsPerPartition=10 AcquireIncrement=5 ...
- **特点**:从Tomcat 7.0版本开始引入的新连接池组件,基于Tomcat JULI日志框架。 - **适用场景**:适合于高并发的应用环境。 - **优缺点**:相较于DBCP,具有更好的并发处理能力和更高的性能,同时支持JMX等...
【标题】"servlet_tomcat.rar"是一个包含多种Java EE技术的压缩包,主要涉及Tomcat服务器、MySQL数据库、BRUUD(可能是误写,常见的应该是“Bukkit”或“BoneCP”,此处假设为“Bukkit”)数据库连接池以及...
Java数据库连接方法主要依赖于`java.sql`包中的接口和类,这个包为Java开发者提供...总的来说,Java通过`java.sql`包和数据库连接池提供了灵活且高效的数据库访问机制,确保了在各种数据库环境下的可移植性和性能优化。
使用JNDI方式配置数据库连接池时,不需要在项目中额外引入JAR包,但需要在Web服务器的配置文件中进行设置。以Tomcat为例,我们需要在`$CATALINA_HOME/conf/context.xml`文件中添加`<Resource>`标签,配置包括数据库...
每种连接池都有自己的配置参数,如最小连接数、最大连接数、超时时间等,可以配置在XML文件中或通过代码硬编码。例如,配置C3P0连接池可能涉及以下参数: ```properties c3p0.min_size=5 c3p0.max_size=20 c3p0....
// 配置数据源,例如BoneCP连接池 BoneCPDataSource boneCPDataSource = new BoneCPDataSource(); boneCPDataSource.setDriverClass("com.mysql.jdbc.Driver"); boneCPDataSource.setJdbcUrl("jdbc:mysql://...
在Java编程中,数据库访问是不可或缺的一部分,主要是...总的来说,Java数据库访问服务的核心在于理解`java.sql`包中的API和选择合适的数据库连接池,正确配置和使用它们,可以显著提升应用程序的性能和资源利用率。
- 添加 Spring Web MVC 和 BoneCP 连接池的依赖,以支持 Web 应用和数据库访问。 ```xml <groupId>org.springframework <artifactId>spring-webmvc <version>4.3.7.RELEASE <!-- 连接池 --> ...
本文将详细介绍几种常用的数据源解决方案及其配置方法,包括JNDI方式创建`DataSource`、Apache提供的简单连接池创建数据源、C3P0方式创建数据源、Proxool方式创建数据源以及BoneCP方式创建数据源。 #### JNDI 方式...
在dependencies中定义了需要导入的依赖,如spring-webmvc用于提供Web MVC的支持,bonecp-spring用于数据库连接池。 构建部分需要配置finalName来指定生成的war包名称。此外,还需要配置插件来处理资源文件拷贝、...
创建一个新的 Maven 项目,添加 Spring WebMvc 和连接池(例如 BoneCP)依赖。在项目中创建一个配置类,使用 `@Configuration` 注解,并在其中定义 Bean,使用 `@Bean` 注解。例如,你可以创建一个 DataSource Bean...
Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模...