Java中的BoneCP數據庫連接池(轉載)

BoneCP is a fast, free, open-source, Java database connection pool (JDBC Pool) library. If you are familiar with C3P0 and DBCP then you already know what this means. For the rest, this is a library that will manage a database connection for you to get faster database access in your application.
BoneCP is fast! For some tests, it's almost 25 times faster than the next fastest connection pool option, not to mention that BoneCP never 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包:

  • A database that accepts connections
  • A driver to go with it
  • Google Guava library, available for free from here.
  • The SLF4J logging library.
  • 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;
       
      /** 
       * 
      @author sxyx2008
       *
       
      */
      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秒檢查數據庫中的空閒連接數
                  config.setIdleConnectionTestPeriod(60);
                  
      //設置連接空閒時間
                  config.setIdleMaxAge(240);
                  
      //設置每個分區中的最大連接數 30
                  config.setMaxConnectionsPerPartition(30);
                  
      //設置每個分區中的最小連接數 10
                  config.setMinConnectionsPerPartition(10);
                  
      //當連接池中的連接耗盡的時候 BoneCP一次同時獲取的連接數
                  config.setAcquireIncrement(5);
                  
      //連接釋放處理
                  config.setReleaseHelperThreads(3);
                  
      //設置分區  分區數爲3
                  config.setPartitionCount(3);
                  
      //設置配置參數
                  connectionPool = new BoneCP(config); // setup the connection pool
                  
                  connection 
      = connectionPool.getConnection(); // fetch a 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。
      除此之外,還需要做如下配置:

    • <!-- Hibernate SessionFactory -->  
    • <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" autowire="autodetect">  
    •     <property name="hibernateProperties">  
    •         <props>  
    •             <prop key="hibernate.connection.provider_class">com.jolbox.bonecp.provider.BoneCPConnectionProvider</prop>  
    •             <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>  
    •             <prop key="hibernate.connection.url">jdbc:mysql://127.0.0.1/yourdb</prop>  
    •             <prop key="hibernate.connection.username">root</prop>  
    •             <prop key="hibernate.connection.password">abcdefgh</prop>  
    •             <prop key="bonecp.idleMaxAge">240</prop>  
    •             <prop key="bonecp.idleConnectionTestPeriod">60</prop>  
    •             <prop key="bonecp.partitionCount">3</prop>  
    •             <prop key="bonecp.acquireIncrement">10</prop>  
    •             <prop key="bonecp.maxConnectionsPerPartition">60</prop>  
    •             <prop key="bonecp.minConnectionsPerPartition">20</prop>  
    •             <prop key="bonecp.statementsCacheSize">50</prop>  
    •             <prop key="bonecp.releaseHelperThreads">3</prop>  
    •         </props>  
    •     </property>  
    • </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;
       
      /** 
       * 
      @author sxyx2008
       *
       
      */
      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();
                  }
                  
      /*
                  config.setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521:orcl"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
                  config.setUsername("scott"); 
                  config.setPassword("tiger");
                  //設置每60秒檢查數據庫中的空閒連接數
                  config.setIdleConnectionTestPeriod(60);
                  //設置連接空閒時間
                  config.setIdleMaxAge(240);
                  //設置每個分區中的最大連接數 30
                  config.setMaxConnectionsPerPartition(30);
                  //設置每個分區中的最小連接數 10
                  config.setMinConnectionsPerPartition(10);
                  //當連接池中的連接耗盡的時候 BoneCP一次同時獲取的連接數
                  config.setAcquireIncrement(5);
                  //連接釋放處理
                  config.setReleaseHelperThreads(3);
                  //設置分區  分區數爲3
                  config.setPartitionCount(3);
                  
      */
                  
      //設置配置參數
                  connectionPool = new BoneCP(config); // setup the connection pool
                  
                  
      long startTime=System.currentTimeMillis();
                  
      //創建100個連接
                  for (int i = 0; i < 100; i++) {
                      connection 
      = connectionPool.getConnection(); // fetch a 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();
                      }
                  }
              }
          }
      }
    點我下載本文工程代碼

    上文來自: http://www.cnblogs.com/batys/archive/2012/01/09/2316792.html

    -----------------------------------分割線-1----------------------------------

    原文: http://appleblue.iteye.com/blog/838069

    BoneCP是一種新的數據連接技術,以其效率高,速度快著稱。經過實踐檢驗也確實如此。參考BoneCP

    以下是BoneCP與Spring配置的步驟:

    1、獲取BoneCP的jar包 網址:http://jolbox.com/index.html?page=http://jolbox.com/download.html

    2、獲取如下jar包: bonecp-0.7.0.jar  bonecp-provider-0.7.0.jar  bonecp-spring-0.7.0.jar  google-collections-1.0.jar  slf4j-api-1.6.1.jar  slf4j-log4j12-1.6.1.jar

    3、開發環境 myeclipse6.5   jboss4.2.3    windows server 2003  oracle9i

    4、將以上jar包放入項目的lib目錄下即可,spring配置如下:

    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
      destroy-method="close">
      <property name="driverClass"
       value="oracle.jdbc.driver.OracleDriver" />
      <property name="jdbcUrl" value="數據庫路徑" />
      <property name="username" value="數據庫用戶名" />
      <property name="password" value="數據庫密碼" />

     檢查數據庫連接池中空閒連接的間隔時間

      <property name="idleConnectionTestPeriod" value="60" />

    連接池中未使用的鏈接最大存活時間
      <property name="idleMaxAge" value="240" />

    設置每個分區含有connection最大個數
      <property name="maxConnectionsPerPartition" value="30" />

    設置每個分區含有connection最小個數
      <property name="minConnectionsPerPartition" value="10" />

    設置每個分區數
      <property name="partitionCount" value="3" />

    設置分區中的connection增長數量
      <property name="acquireIncrement" value="5" />

     設置連接池閥值

      <property name="poolAvailabilityThreshold" value="10"></property>
      連接時間
      <property name="connectionTimeout" value="3000"></property>

     </bean>

     

    -----------------------------------分割線-2----------------------------------

    原文: 

    http://blog.csdn.net/wozailongyou/article/details/5783302




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章