avatar

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

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

1 Druid简介

Druid 是目前比较流行的高性能的(阿里的),分布式列存储的OLAP框架(具体来说是MOLAP)。它有如下几个特点:
一. 亚秒级查询
druid提供了快速的聚合能力以及亚秒级的OLAP查询能力,多租户的设计,是面向用户分析应用的理想方式。
二.实时数据注入
druid支持流数据的注入,并提供了数据的事件驱动,保证在实时和离线环境下事件的实效性和统一性
三.可扩展的PB级存储
druid集群可以很方便的扩容到PB的数据量,每秒百万级别的数据注入。即便在加大数据规模的情况下,也能保证时其效性
四.多环境部署
druid既可以运行在商业的硬件上,也可以运行在云上。它可以从多种数据系统中注入数据,包括hadoop,spark,kafka,storm和samza等
五.丰富的社区
druid拥有丰富的社区,供大家学习

好,接下来也是本仙鱼手把手带你来认识Druid~

2 使用步骤

2.1 创建项目

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

2.2 导入相关的jar包:

导入如下两个jar包:druid-1.1.5.jar

mysql-connector-java-5.1.41.jar

本篇博客中不再进行数据库增删改查的操作,mysql-connector-java-5.1.41.jar可以不加,因为习惯问题,我加上了~哈哈.

如果你没有这几个jar包的话:点击进入下载传送门

在这里插入图片描述

想要去使用Druid那我们就要对它的属性们进行一个初始化的设置,本篇博客中只举简单的例子,不再进行数据库增删改查的操作,数据库连接池之自定义连接池中有相关的操作,可以去那里查看呦.

2.3 Druid初始化

2.3.1 通过硬编码初始化Druid

通过硬编码直接初始化Druid:就是在没有配置文件的情况下,手动在静态代码块中将要使用的属性(只列举部分)直接进行初始化赋值操作:

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
public class Druid {
//Druid德鲁伊,据说是魔兽世界中的一个角色,森林女神
public static DruidDataSource dataSource;

//1.初始化Druid连接池
static {
//1.硬编码初始化Druid连接池
try {
dataSource = new DruidDataSource();
//四个基本属性
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("root");
dataSource.setPassword("123456789");
//其他属性
//初始大小
dataSource.setInitialSize(10);
//最大大小
dataSource.setMaxActive(50);
//最小大小
dataSource.setMinIdle(10);
//检查时间
dataSource.setMaxWait(5000);

} catch (Exception e) {
e.printStackTrace();
}
}
}

2.3.2 通过软编码初始化Druid

Druid是不能自动加载配置文件的,我们需要使用类加载器手动来加载配置文件获取配置文件中的属性.

druid.properties

properties
1
2
3
4
5
6
7
8
9
10
11
12
13
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=123456789
#
initialSize=10
#最大连接数量
maxActive=50
#
minIdle=5
#
maxWait=6000

加载配置文件:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Druid {
//Druid德鲁伊,据说是魔兽世界中的一个角色,森林女神
public static DruidDataSource dataSource;

//1.初始化Druid连接池
static {
//第二种方式:使用软编码通过配置文件初始化DBCP
try {
Properties properties = new Properties();
//通过类加载器加载配置文件
InputStream inputStream = DBCP.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(inputStream);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
}

2.4 通过Druid获取数据库连接

java
1
2
3
4
5
6
7
8
9
10
11
public class Druid {
//2.获取连接
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}

2.5 关闭连接

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

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Druid {
//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 测试Druid

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

测试代码:

java
1
2
3
4
5
6
7
8
9
@Test
public void DruidTest() {
//超过最大限制或报"TimeoutException",每打开一个关闭一个就不会发生异常
for (int i = 0; i < 51; i++) {
Connection connection = Druid.getConnection();
System.out.println(connection.toString() + "\n------------------------------------");
Druid.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
105
106
四月 18, 2019 8:15:06 上午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------
com.mysql.jdbc.JDBC4Connection@3a82f6ef
------------------------------------

Process finished with exit code 0

看到这里你明白Druid是怎么实现的了吗?

最后,小仙?在这里感谢您看到最后,有收获的话给本仙鱼点个赞吧~

有问题留言呦,再见祝您生活愉快

文章作者: 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%8BDruid%E8%BF%9E%E6%8E%A5%E6%B1%A0-mysql/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XiaoMing's Blog
打赏
  • 微信
    微信
  • 支付寶
    支付寶