Java中的BoneCP数据库连接池

最近在学习公司的框架,涉及到连接数据库部分的技术时,发现用的是BoneCP,上网查阅了相关资料与例子,个人觉得下面这例子比较容易懂,有收藏的价值存在,故将其放在自己的博客里,供学习时参考: 

BoneCP is a fast, free, open-source, Java database connectionpool (JDBC Pool) library. If you are familiar with C3P0 and DBCPthen you already know what this means. For the rest, this is alibrary that will manage a database connection for you to getfaster database access in your application.
BoneCP is fast! For some tests, it's almost 25 times faster thanthe next fastest connection pool option, not to mention that BoneCPnever spin-locks so it won't slow down your application.
官方主页:http://jolbox.com/
下载地址:http://jolbox.com/bonecp/downloads/maven/com/jolbox/bonecp/
目前最新版本为:0.6.7.2
依赖的jar包:

1.A database that accepts connections

2.A driver to go with it

3.Google Guava library, available for free from here.

4.The SLF4J logginglibrary.

5.JDK1.5 or higher.


bonecp-0.7.0.jar

google-collections-1.0.jar
log4j-1.2.15.jar
mysql-connector-java-5.1.6-bin.jar(mysql驱动)
slf4j-api-1.5.10.jar
slf4j-log4j12-1.5.10.jar
以上jar包可以在这里下载http://jolbox.com/bonecp/downloads/maven/

在jdbc中使用BoneCP连接池。

package com.bonecp;
 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
 

public class ExampleJDBC {
 
    
public static void main(String[] args) {
        BoneCP connectionPool 
= null;
        Connection connection 
= null;
 
        
try {
            
// load the database driver (make sure this is in your classpath!)
            Class.forName("com.mysql.jdbc.Driver");
        
catch (Exception e) {
            e.printStackTrace();
            
return;
        }
        
        
try {
            
// setup the connection pool
            BoneCPConfig config = new BoneCPConfig();
            config.setJdbcUrl(
"jdbc:mysql://localhost:3306/demo"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
            config.setUsername("root"); 
            config.setPassword(
"root");
            
//设置每60秒检查数据库中的空闲连接数<!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
            config.setIdleConnectionTestPeriod(60);
            
//设置连接空闲时间 <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
            config.setIdleMaxAge(240);
            
//设置每个分区中的最大连接数 30
            config.setMaxConnectionsPerPartition(30);
            
//设置每个分区中的最小连接数 10
            config.setMinConnectionsPerPartition(10);
            
//当连接池中的连接耗尽的时候 BoneCP一次同时获取的连接数 <!-- 每次去拿数据库连接的时候一次性要拿几个,默认值:2 -->
            config.setAcquireIncrement(5);
            
//连接释放处理   每个分区释放链接助理进程的数量,默认值:3,除非你的一个数据库连接的时间内做了很多工作,不然过多的助理进程会影响你的性能
            config.setReleaseHelperThreads(3);
            
//设置分区  分区数为3 <!-- 分区数 ,默认值2,最小1,推荐3-4,视应用而定-->
            config.setPartitionCount(3);
            
//设置配置参数
            connectionPool = new BoneCP(config); // setup the connection pool
            
            connection 
= connectionPool.getConnection(); // fetch connection
            
            
if (connection != null){
                System.out.println(
"Connection successful!");
                Statement stmt 
= connection.createStatement();
                ResultSet rs 
= stmt.executeQuery(" select from person "); // do something with the connection.
                while(rs.next()){
                    System.out.println(rs.getString(
1)); // should print out "1"'
                    System.out.println(rs.getString(2)); // should print out "1"'
                }
            }
            connectionPool.shutdown(); 
// shutdown connection pool.
        catch (SQLException e) {
            e.printStackTrace();
        
finally {
            
if (connection != null{
                
try {
                    connection.close();
                
catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

使用DataSource

package com.bonecp;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.jolbox.bonecp.BoneCPDataSource;

public class ExampleDataSource {
    
    
public static void main(String[] args) {
        
        Connection connection 
= null;
        
        
try {
            Class.forName(
"com.mysql.jdbc.Driver");
        
catch (Exception e) {
            e.printStackTrace();
        }
        
        BoneCPDataSource dataSource
=new BoneCPDataSource();
        dataSource.setUsername(
"root");
        dataSource.setPassword(
"root");
        dataSource.setJdbcUrl(
"jdbc:mysql://localhost:3306/demo");
        dataSource.setMaxConnectionsPerPartition(
10);
        dataSource.setMinConnectionsPerPartition(
5);
        dataSource.setIdleConnectionTestPeriod(
60);
        dataSource.setIdleMaxAge(
240);
        dataSource.setAcquireIncrement(
5);
        dataSource.setReleaseHelperThreads(
3);
        
try {
            connection
=dataSource.getConnection();
            
if (connection != null){
                System.out.println(
"Connection successful!");
                Statement stmt 
= connection.createStatement();
                ResultSet rs 
= stmt.executeQuery(" select from person "); // do something with the connection.
                while(rs.next()){
                    System.out.println(rs.getString(
1)); // should print out "1"'
                    System.out.println(rs.getString(2)); // should print out "1"'
                }
            }
        
catch (SQLException e) {
            e.printStackTrace();
        }
finally{
            
try {
                connection.close();
            
catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        
    }
    
}


在Hibernate中使用BoneCP
在Hibernate中使用BoneCP除了需要上面提到的jar包之外,还需要下载一个名为bonecp-provider-0.7.0.jar的bonecp-provider的jar包,它的下载位置是:http://jolbox.com/bonecp/downloads/maven/com/jolbox/bonecp-provider/0.7.0/bonecp-provider-0.7.0.jar。
除此之外,还需要做如下配置:

  1. <!-- Hibernate SessionFactory -->  
  2. <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" autowire="autodetect">  
  3.     <property name="hibernateProperties">  
  4.         <props>  
  5.             <prop key="hibernate.connection.provider_class">com.jolbox.bonecp.provider.BoneCPConnectionProvider</prop>  
  6.             <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>  
  7.             <prop key="hibernate.connection.url">jdbc:mysql://127.0.0.1/yourdb</prop>  
  8.             <prop key="hibernate.connection.username">root</prop>  
  9.             <prop key="hibernate.connection.password">abcdefgh</prop>  
  10.             <prop key="bonecp.idleMaxAge">240</prop>  
  11.             <prop key="bonecp.idleConnectionTestPeriod">60</prop>  
  12.             <prop key="bonecp.partitionCount">3</prop>  
  13.             <prop key="bonecp.acquireIncrement">10</prop>  
  14.             <prop key="bonecp.maxConnectionsPerPartition">60</prop>  
  15.             <prop key="bonecp.minConnectionsPerPartition">20</prop>  
  16.             <prop key="bonecp.statementsCacheSize">50</prop>  
  17.             <prop key="bonecp.releaseHelperThreads">3</prop>  
  18.         </props>  
  19.     </property>  
  20. </bean

xml方式配置bonecp

<?xml version="1.0" encoding="UTF-8"?>
<bonecp-config>  
  
<default-config>  
    
<property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>  
    
<property name="username">scott</property>  
    
<property name="password">tiger</property>  
    
<property name="partitionCount">3</property>  
    
<property name="maxConnectionsPerPartition">30</property>  
    
<property name="minConnectionsPerPartition">10</property>  
    
<property name="acquireIncrement">3</property>  
  
</default-config>   
</bonecp-config> 

 

连接代码

package  com.bonecp;
 
import  java.sql.Connection;
import  java.sql.ResultSet;
import  java.sql.SQLException;
import  java.sql.Statement;

import  com.jolbox.bonecp.BoneCP;
import  com.jolbox.bonecp.BoneCPConfig;
 

public   class  ExampleJDBC {
 
    
public   static   void  main(String[] args) {
        BoneCP connectionPool 
=   null ;
        
        Connection connection 
=   null ;
        
try  {
            
//  load the database driver (make sure this is in your classpath!)
            Class.forName( " oracle.jdbc.driver.OracleDriver " );
        
catch  (Exception e) {
            e.printStackTrace();
            
return ;
        }
        
        
try  {
            
//  setup the connection pool
            BoneCPConfig config  =   null ;
            
try  {
                config 
=   new  BoneCPConfig( " bonecp-config.xml " );
            
catch  (Exception e) {
                e.printStackTrace();
            }
            

            
// 设置配置参数
            connectionPool  =   new  BoneCP(config);  //  setup the connection pool
            
            
long  startTime = System.currentTimeMillis();
            
// 创建100个连接
             for  ( int   =   0 <   100 i ++ {
                connection 
=  connectionPool.getConnection();  //  fetch connection
            }
            
long  endtTime = System.currentTimeMillis();
            
            System.out.println(
" -------->total seconds : " + (endtTime - startTime));
            
            
if  (connection  !=   null ){
                System.out.println(
" Connection successful! " );
                Statement stmt 
=  connection.createStatement();
                ResultSet rs 
=  stmt.executeQuery( "  select from emp  " );  //  do something with the connection.
                 while (rs.next()){
                    System.out.println(rs.getString(
1 ));  //  should print out "1"'
                    System.out.println(rs.getString( 2 ));  //  should print out "1"'
                }
            }
            connectionPool.shutdown(); 
//  shutdown connection pool.
         catch  (SQLException e) {
            e.printStackTrace();
        
finally  {
            
if  (connection  !=   null {
                
try  {
                    connection.close();
                
catch  (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值