avatar

目录
数据库连接池之DBCP连接池(mysql)

本仙又更博了,我是勤劳的小蜜蜂~

1 DBCP简介

DBCP(DataBase connection pool):

DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。

由于建立数据库连接是一个非常耗时的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

好,接下来请和本仙一起来体验一下DBCP的使用,这回是手把手的教呦~

2 使用步骤

2.1 创建项目

本仙使用的是IDEA,个人觉得创建项目常规操作,略过.

2.2 导入相关的jar包:

导入下图所示的四个jar包,commons-dbcp2-2.1.1.jarcommons-pool2-2.4.2.jar是单独使用DBCP是比加的两个包,然后commons-logging-1.2.jar是日志支持jar包,mysql-connector-java-5.1.41-bin.jar(mysql-connector-java-5.1.41.jar都可以)是连接数据库驱动jar包,本篇博客中不再进行数据库增删改查的操作,可以不加,因为习惯问题,我加上了~哈哈.
如果你没有这几个jar包的话:点击进入下载传送门:
DBCP需要引入的jar包
想要去使用DBCP那我们就要对它的属性们进行一个初始化的设置,本篇博客中只举简单的例子,不再进行数据库增删改查的操作,上一篇博客(*数据库连接池之自定义连接池*)中有相关的操作,可以去那里查看呦.

2.3 DBCP初始化

2.3.1 通过硬编码初始化DBCP

通过硬编码直接初始化DBCP:就是在静态代码块中将要使用的属性(只列举部分)直接进行初始化赋值操作:

java
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
public class DBCP {
//这里用的是BasicDataSource类
public static BasicDataSource dataSource;

//1.初始化DBCP
static {
//第一种方式:使用硬编码直接初始化DBCP
dataSource = new BasicDataSource();
//设置四个基本属性
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("root");
dataSource.setPassword("123456789");
//初始化连接数量
dataSource.setInitialSize(10);
//最大连接数量
dataSource.setMaxTotal(50);
//最大空闲连接
dataSource.setMaxIdle(20);
//最小空闲连接
dataSource.setMinIdle(5);
//超时等待时间以毫秒为单位 6000毫秒/1000等于60秒
dataSource.setMaxWaitMillis(6000);
}
}
2.3.2 通过软编码初始化DBCP

通过软编码初始化DBCP:就是通过配置文件(dbcp.properties)对相关的基本属性进行设置,通过加载配置文件来初始化DBCP:

在配置文件中有一个点需要注意一下:属性的命名是有约束的,必须是小驼峰(第一个单词首字母小写,后面单词首字母大写)命名,而且要和setXxxx()方法中的Xxxx保持一致;
如:
在.java文件中有一个方法是获取数据库用户名:dataSource.setUsername(“root”);
那么在配置文件中获取数据库用户名应该为:username = root

先献上配置文件:dbcp.properties

properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///mydatabase
username=root
password=123456789
#初始化连接
initialSize=10
#最大连接数量
maxTotal=50
#最大空闲时间
maxIdle=20
#最小空闲连接
minIdle=5
#超时等待时间以毫秒为单位 6000毫秒/1000等于60秒
maxWaitMillis=6000

DBCP.java

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class DBCP {
public static BasicDataSource dataSource;

//1.初始化DBCP
static {
//第二种方式:使用软编码通过配置文件初始化DBCP
try {
//这个地方我们可以理解为是手动加载配置文件
Properties properties = new Properties();
//通过类加载器加载配置文件
InputStream inputStream = DBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");
properties.load(inputStream);
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
}

2.4 通过DBCP获取数据库连接

java
1
2
3
4
5
6
7
8
9
10
11
12
public class DBCP {
//2.获取连接
public static Connection getConnection() {
try {
//直接使用DBCP封装的方法来获取链接
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}

2.5 关闭连接

注意:我们这里的关闭连接并不是真的关闭了数据库连接,而是将连接回收,重新放入了DBCP中,和我们自定义写的数据库连接池不一样的欧~关的顺序问题我就不再强调了,本仙女的记忆方式,后开的先关

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class DBCP {
//3.关闭连接
public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

2.6 测试DBCP

就这么写完了当然要测试一下,那我就简单的用Junit测试一下,顺便带上测试结果,方便您理解这个过程:
测试代码:

java
1
2
3
4
5
6
7
8
9
10
11
@Test
public void DBCPTest() {
//超过最大连接限制或报"TimeoutException",每打开一个关闭(不是真的关,是回收)一个就不会发生异常
for (int i = 0; i < 51; i++) {
Connection connection = DBCP.getConnection();
System.out.println(connection.toString() + "\n------------------------------------");
//这里的closeAll()方法中虽然调用了connection.close(),但是并不会关闭,只是把对象放回连接池中
//你就把它当成一个收破烂的就行了,你喝完了一瓶饮料,然后close()了,然后交给收破烂的放进他的垃圾袋子(即DBCP)中啦,哈哈哈
DBCP.closeAll(connection, null, null);
}
}

测试结果:

java
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
com.myproject.test.TestAll,DBCPTest
1740035246, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
913190639, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1018937824, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1915058446, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
922151033, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1387228415, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
748658608, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
167185492, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1937348256, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1358444045, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
331844619, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
64830413, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
653687670, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
2136344592, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
329611835, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
863831416, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1638172114, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1651945012, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1007251739, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
194494468, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
853993923, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1702146597, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
591723622, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
95395916, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1778535015, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
24433162, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
519821334, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1307096070, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
2081303229, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1076835071, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1525262377, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1418428263, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1836643189, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1597462040, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
853119666, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1144648478, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
600746945, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1458849419, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
981661423, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1681595665, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
57494364, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1374677625, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
963269035, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
2140832232, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1659791576, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1483022288, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1410986873, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
221036634, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
1418370913, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
2081853534, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
710714889, URL=jdbc:mysql:///mydatabase, UserName=root@localhost, MySQL Connector Java
------------------------------------
Process finished with exit code 0

看到这里你明白DBCP是怎么实现的了吗?
最后,小仙?在这里感谢您看到最后,有收获的话给本仙鱼点个赞吧~
有问题留言呦,再见祝您生活愉快

文章作者: XiaoMing
文章链接: https://xiaoming0929.github.io/2020/04/02/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%E4%B9%8BDBCP%E8%BF%9E%E6%8E%A5%E6%B1%A0-mysql/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XiaoMing's Blog
打赏
  • 微信
    微信
  • 支付寶
    支付寶