数据库连接池--概述以及DBCP实现

数据库连接池--概述以及DBCP实现

1. 为什么要引入数据库连接池

  应用程序直接获取连接的方式中,用户每次请求都需要向服务器获得连接,而服务器创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万的访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库服务器的资源,并且极易造成数据库服务器内存溢出,宕机.

2.  开源的数据库连接池

  数据库连接池必须实现javax.sql.DataSource接口,并提供getConnection()方法.

  DBCP 数据库连接池

    是Apache软件基金会组织下的开源连接池的实现,使用DBCP数据源,应用程序应在系统中引入如下两个jar文件:

    Commoms-dbcp.jar:连接池的实现

    Commons-pool.jar:连接池实现的依赖

    Tomcat的连接池正是采用该连接池实现的.该数据库连接池既可以与应用服务器整合应用,也可以由程序独立使用.

  DBCP的核心类是BasicDataSource

  下面使用两种方式演示使用BasicDataSource从数据库获取连接池的方法.注意需要在工程项目中导入JDBC的jar包,保证可以获得数据库连接

  第一种,在BasicDataSource类对象初始化时通过BasicDataSource自身的API对数据库连接以及连接池的一些属性进行设置.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import  javax.sql.DataSource;
import  org.apache.commons.dbcp.BasicDataSource;
public  class  DBCPUtils {
     private  static  BasicDataSource dataSource = new  BasicDataSource();
     static {
         //以下是创建数据库连接的基本设置
         //类似于JDBC连接中注册驱动--->Class.forName("com.mysql.jdbc.Driver");
         dataSource.setDriverClassName( "com.mysql.jdbc.Driver" );
         //设置JDBC中用于获取连接的参数--->Connection conn = DriverManager.getConnection(url,username,password);
         dataSource.setUrl( "jdbc:mysql://localhost:3306/day17" );
         dataSource.setUsername( "root" );
         dataSource.setPassword( "fujianyi" );
         
         //以下是数据库连接池的设置
         //设置数据库连接池的初始化连接数
         dataSource.setInitialSize( 10 );
         //设置数据库连接池的最大活动数,数据库服务器所能承受的最大连接数
         dataSource.setMaxActive( 20 );
         //设置数据库连接池在空闲时保持的最大连接数
         dataSource.setMaxIdle( 15 );
         //设置数据库连接池在空闲时保持的最小连接数
         dataSource.setMinIdle( 5 );  
     }
     public  static  DataSource getDataSource(){
         return  dataSource;
     }
}

   第二种,使用BasicDataSourceFactory工厂类创建BasicDataSource连接池,并在创建连接时,将数据库连接以及连接池的属性通过配置文件的方式进行设置.注意在获取配置文件的路径,为当前工程的classpath,也就是src目录下保证配置文件的存在.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import  java.io.InputStream;
import  java.util.Properties;
import  javax.sql.DataSource;
import  org.apache.commons.dbcp.BasicDataSourceFactory;
 
public  class  DBCPUtils2 {
     private  static  DataSource dataSource;
     static {
         try  {
             Properties properties = new  Properties();
             InputStream in = DBCPUtils2. class .getClassLoader().getResourceAsStream( "dbcpconfig.properties" );
             properties.load(in);
             dataSource = BasicDataSourceFactory.createDataSource(properties);
         } catch  (Exception e) {
             throw  new  RuntimeException(e);
         }
         
     }
     public  static  DataSource getDataSource(){
         return  dataSource;
     }
}

   以下是上述代码引用的配置文件dbcpconfig.properties的内容,里面是一些配置,同第一种方式的配置内容一样.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#连接设置
driverClassName=com.mysql.jdbc.Driver
username=root
password=fujianyi
 
# <!-- 初始化连接 -->
initialSize=10
 
#最大连接数量
maxActive=50
 
# <!-- 最大空闲连接 -->
maxIdle=20
 
# <!-- 最小空闲连接 -->
minIdle=5
 
# <!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
 
 
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk
 
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
 
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
 
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

 

学习笔记
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值