DBCP数据源
DBCP是数据库连接池(DataBase Connection Pool)的简称,是Apache组织下的开源连接池实现,也是Tomcat服务器使用的连接池组件。单独使用DBCP数据源时,需要在应用程序中导入两个jar包,具体如下:
● commons-dbcp.jar包:
commons-dbcp.jar包是DBCP数据源的实现包,包含了所有操作数据库连接信息和数据库连接池初始化信息的方法,并实现了DataSource接口的getConnection()方法。
● commons-pool.jar包:
commons-pool.jar包是DBCP数据库连接池实现包的依赖包,为commons-dbcp.jar包中的方法提供了支持。可以这么说,没有该依赖包,commons-dbcp.jar包中的很多方法就没有办法实现。
在上面两个jar包中, commons-dbcp.jar包中包含两个核心的类,分别是BasicDataSourceFactory和BasicDataSource,它们都包含获取DBCP数据源对象的方法。接下来,针对这两个类的方法进行详细讲解。
BasicDataSource是DataSource接口的实现类,主要包括设置数据源对象的方法,具体如表1所示。
表1 BasicDataSource类的常用方法
方法名称 | 功能描述 |
---|---|
void setDriverClassName(String driverClassName) | 设置连接数据库的驱动名称 |
void setUrl(String url) | 设置连接数据库的路径 |
void setUsername(String username) | 设置数据库的登陆账号 |
void setPassword(String password) | 设置数据库的登录密码 |
void setInitialSize(int initialSize) | 设置数据库连接池初始化的连接数目 |
void setMaxActive (int maxIdle) | 设置数据库连接池最大活跃的连接数目 |
void setMinIdle(int minIdle) | 设置数据库连接池最小闲置的连接数目 |
Connection getConnection() | 从连接池中获取一个数据库连接 |
在表1中,列举了BasicDataSource对象的常用方法,其中setDriverClassName()、setUrl()、setUsername()、setPassword()等方法都是设置数据库连接信息的方法;setInitialSize()、setMaxActive()、setMinIdle()等方法都是设置数据库连接池初始化值的方法;getConnection()方法表示从DBCP数据源中获取一个数据库连接。
BasicDataSourceFactory是创建BasicDataSource对象的工厂类,它包含一个返回值为BasicDataSource对象的方法createDataSource(),该方法通过读取配置文件的信息生成数据源对象并返回给调用者。这种把数据库的连接信息和数据源的初始化信息提取出来写进配置文件的方式,让代码看起来更加简洁,思路也更加清晰了。
当使用DBCP数据源时,首先得创建数据源对象,数据源对象的创建方式有两种,具体如下:
1、 通过BasicDataSource**类直接创建数据源对象**
使用BasicDataSource类创建一个数据源对象,手动给数据源对象设置属性值,然后获取数据库连接对象。接下来,通过一个案例来演示,具体步骤如下:
(1)在工程chapter02中导入mysql-connector-java-5.0.8-bin.jar、commons-dbcp.jar、commons-pool-1.5.6.jar三个jar包,然后在该工程的src目录下创建cn.itcast.example包,并在该包下创建一个Example02类,如例1所示。
例1 Example02.java
1 package cn.itcast.example;
2 import java.sql.Connection;
3 import java.sql.DatabaseMetaData;
4 import java.sql.SQLException;
5 import javax.sql.DataSource;
6 import org.apache.commons.dbcp.BasicDataSource;
7 public class Example02 {
8 public static DataSource ds = null;
9 static {
10 // 获取DBCP数据源实现类对象
11 BasicDataSource bds = new BasicDataSource();
12 // 设置连接数据库需要的配置信息
13 bds.setDriverClassName("com.mysql.jdbc.Driver");
14 bds.setUrl("jdbc:mysql://localhost:3306/chapter02");
15 bds.setUsername("root");
16 bds.setPassword("itcast");
17 // 设置连接池的参数
18 bds.setInitialSize(5);
19 bds.setMaxActive(5);
20 ds = bds;
21 }
22 public static void main(String[] args) throws SQLException {
23 // 获取数据库连接对象
24 Connection conn = ds.getConnection();
25 //获取数据库连接信息
26 DatabaseMetaData metaData = conn.getMetaData();
27 //打印数据库连接信息
28 System.out.println(metaData.getURL()
29 +",UserName="+metaData.getUserName()
30 +","+metaData.getDriverName());
31 }
32 }
程序的运行结果如图1所示:
图1 运行结果
从图1中可以看出,BasicDataSource成功创建了一个数据源对象,然后获取到了数据库连接对象。
2、 通过读取配置文件创建数据源对象
使用BasicDataSourceFactory工厂类读取配置文件,创建数据源对象,然后获取数据库连接对象。接下来,通过一个案例来演示,具体步骤如下:
(1)chapter02工程的src目录下创建dbcpconfig.properties文件,用于设置数据库的连接信息,和数据源的初始化信息,如例2所示。
例2 dbcpconfig.properties
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/chapter02
username=root
password=itcast
\#初始化连接
initialSize=5
\#最大连接数量
maxActive=10
\#最大空闲连接
maxIdle=10
(2)在cn.itcast.example包下创建一个Example03类,如例3所示:
例3 Example03.java
1 package cn.itcast.example;
2 import java.io.InputStream;
3 import java.sql.Connection;
4 import java.sql.DatabaseMetaData;
5 import java.sql.SQLException;
6 import java.util.Properties;
7 import javax.sql.DataSource;
8 import org.apache.commons.dbcp.BasicDataSourceFactory;
9 public class Example03 {
10 public static DataSource ds = null;
11 static {
12 // 新建一个配置文件对象
13 Properties prop = new Properties();
14 try {
15 // 通过类加载器找到文件路径,读配置文件
16 InputStream in = new Example03().getClass().getClassLoader()
17 .getResourceAsStream("dbcpconfig.properties");
18 // 把文件以输入流的形式加载到配置对象中
19 prop.load(in);
20 // 创建数据源对象
21 ds = BasicDataSourceFactory.createDataSource(prop);
22 } catch (Exception e) {
23 throw new ExceptionInInitializerError(e);
24 }
25 }
26 public static void main(String[] args) throws SQLException {
27 // 获取数据库连接对象
28 Connection conn = ds.getConnection();
29 //获取数据库连接信息
30 DatabaseMetaData metaData = conn.getMetaData();
31 //打印数据库连接信息
32 System.out.println(metaData.getURL()
33 +",UserName="+metaData.getUserName()
34 +","+metaData.getDriverName());
35 }
36 }
程序的运行结果如图2如所示
图2 运行结果
从图2中可以看出,BasicDataSourceFactory工厂类成功读取到配置文件并创建数据源对象,然后获取数据库连接对象。