先了解什么是连接池
没有连接池的情况
- 每次CRUD操作都要使用数据库的时候,都要创建一个数据库连接对象
- 普通的JDBC数据库连接使用 DriverManager 来获取
- 每次向数据库建立连接的时候都要将 Connection 加载到内存中
然后再验证用户名和密码花费时间0.05s~1s左右 - 每次CRUD操作就向数据库要一个连接
- 执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。
数据库的连接资源并没有得到很好的重复利用
若同时有几百人甚至几千人在线,
频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。
数据库连接池
- 池 保存对象的容器
- 连接池 保存数据库连接对象的容器
- 作用:
3.1初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,
3.2用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。
3.3池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。 - 数据库连接池
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,
只需从“缓冲池”中取出一个,使用完毕之后再放回去。
我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接
可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
示意图:
注意点:
连接对象是以链表形式存放,已释放的连接,放到最后。从最前面获取连接对象
连接词中的属性
合理的设置连接池的属性,会提高连接池的性能
- 连接数据库时需要的4个要素
驱动名称,数据库地址,用户名,密码 - 初始化连接数
初始化时,连接池当中创建多少个Connection对象 - 最大连接数
连接池当中最多存储多少个Connection对象 - 最小连接数
连接池当中最少得存多个少Connection对象 - 最大的空闲时间
如果一个获取了连接对象,在指定时间内没有任何动作,就会自动释放链接 - 最大等待时间
在指定时间内,尝试获取连接,如果超出了指定时间,就会提示获取失败
连接池的使用
连接池是使用javax.sql.DataSource接口来表示连接池
DataSource和jdbc一样,也是只提供一个接口,由第三方组织来提供
DataSource数据源和连接池Connection Pool是同一个东西,只是叫法不一样而已
-
常见连接池
2.1 DBCP
Spring推荐,Tomcat的数据源使用的就是DBCP
2.2 C3P0
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布
从2007年就没有更新了,性能比较差。
2.3 Druid
阿里巴巴提供的连接池-德鲁伊-号称最好的连接池,它里面除了这些, 还有更多的功能。 -
使用连接池与不使用连接池区别
1.获取方式不同
传统:Connection conn = DriverManager.getConnection(url.userName,pwd);
连接池:Conneciton conn = DataSource对象.getConnection();
2.释放资源不同
传统:和数据库断开conn.close();
连接池:把数据库连接对象还给连接池,还可以给下一个人来使用 -
连接池操作
主要是学习如何创建DataSource对象,再从DataSource对象中获取Connection对象
这些都是第三方提供者给我们提供好的。直接使用就行。
获取连接对象之后,其余的操作和以前是一样的。
不同的数据库连接池,就是在创建DataSource上不一样。
创建DataSource
-
使用DBCP
1.导入相关的jar包
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
2.在项目中使用连接池来获取连接
获取连接连接池数据源
通过数据源获取连接对象
示例
-
配置文件
2.1 什么是配置文件
资源文件,是以.properties作为扩展名的文件
2.2 在上面使用数据库过程当中,我们把库的连接地址,用户名,密码都写在了代码当中。不便于后期的维护
以后我们的项目是部署到别人的服务器(电脑)当中
别人电脑中的数据库用户名和密码不是你这一个root,和1234了
此时就要去到项目中找对应的代码去修改帐号和密码的地方
但是
部署项目是实施人员做的, 他们不懂Java代码。可能一不小心把你的Java代码删错了
为了安全操作,不能让它直接修改我的Java代码。
此时我们专门为数据库提供一个配置文件,里面就专门存放连接数据库的相关信息
2.3 配置文件的书写
db.properties
内部是以key-value的形式存放
userName=root
password=1234
在Java中读取配置文件
-
改写DBCP
创建db.properties配置文件,里面的内容 是:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc_db
username=root
password=1234
通过配置文件方式获取数据源
-
使用Druid
4.1 开源地址
https://github.com/alibaba/druid
Druid是一个JDBC组件库,包括数据库连接池、SQL Parser等组件。DruidDataSource是最好的数据库连接池。
4.2 从DBCP到Druid
DruidDataSource的配置是兼容DBCP的。从DBCP迁移到DruidDataSource,只需要修改数据源的实现类就可以了。
4.3 使用
1.导包
2.编写代码