DBCP

1. 简介

连接池的基本思想
为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去;
数据库连接池负责分配、管理和释放数据库连接;
数据库连接池在初始化时将创建一定数量 (由最小数据库连接数决定) 的数据库连接放到连接池中,连接池的最大数据库连接数量限定了这个连接池能占有的最大
连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中

DBCP 简介

JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现,也有
开源组织提供了实现,如 DBCP,C3P0 等。DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池
 
DBCP Apache 软件基金组织下的开源连接池实现,Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由
应用程序独立使用。
2. 引入 DBCP 数据源
1. 引入必要 jar 包
    Commons-dbcp.jar(连接池的实现 )
    Commons-pool.jar (连接池实现的依赖库 )
2.在类目录下加入 dbcp 的配置文件:dbcpconfig.properties
     dbcpconfig.properties的配置信息如下:
#连接设置  
driverClassName=com.mysql.jdbc.Driver  
url=jdbc:mysql://localhost:3306/test  
username=root  
password=root  

#初始化连接
initialSize=10

#最大连接数量
maxActive=50

#最大空闲连接
maxIdle=20

#最小空闲连接
minIdle=5

#超时等待时间以毫秒为单位
maxWait=60000

#JDBC 驱动建立连接时附带的连接属性属性的格式必须为这样:[ 属性名 =property;]
#注意:
"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties
=useUnicode=true;characterEncoding=utf8

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit
=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly
=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见 javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
#oracle 只支持 READ_COMMITTED(默认),SERIALIZABLE
defaultTransactionIsolation
=REPEATABLE_READ

3. 在 dbcpUtils 工具类中获取数据库连接

package com.milan.db;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**
*

  • @author milan

  • @TODO

  • @Date 2015-6-28
    */
    public class dbcpUtils {

    private static DataSource ds = null;

    //静态代码块创建数据库连接池
    static{
    try{
    //加载 dbcpconfig.properties 配置文件
    InputStream in = dbcpUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
    Properties prop
    = new Properties();
    prop.load(in);

         </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建数据源</span>
         ds =<span style="color: rgba(0, 0, 0, 1)"> BasicDataSourceFactory.createDataSource(prop);
     }</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">(Exception e){
         </span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ExceptionInInitializerError(e);
     }
    

    }

    /**

    • 获取数据库连接
    • @return
    • @throws SQLException
      */
      public static Connection getConnection() throws SQLException{
      return ds.getConnection();
      }

    /**

    • 关闭数据库连接 (也可以扩展该方法,释放资源即关闭 conn,st,rs)
    • @param conn
      */
      public static void releaseConnection(Connection conn){
      try{
      if(conn!=null)conn.close();
      }
      catch(Exception e){
      e.printStackTrace();
      }
      }

}