目录:

  1. 情景描述
  2. 池概念 资料库连接池
  3. 连接池分类
  4. DBCP连接池使用
  5. 配置文件介绍
  6. 配置文件改写DBCP
  7. Druid连接池
  8. 总结与感谢

1.情景描述

我们在写任何一个方法的时候都要进行如下两步:

conn = JDBCUtil.getConn();
JDBCUtil.close(conn, ps, null);

即连接资料库和释放资源

DAO方法中每次都创建一个connection对象,用完就关闭了,创建Connection成本很大

如何解决这个问题?


2.什么是连接池

  • 没有连接池的情况

每次CRUD操作都要使用资料库的时候,都要创建一个资料库对象

普通的JDBC资料库连接使用DriverManager来获取每次向资料库连接的时候都要将Connection载入到内容中然后再验证用户名和密码花费时间0.05s~1s左右每次CRUD操作就向资料库要一个连接,执行完成后再断开连接,这样的方式将会消耗大量的资源和时间-->>资料库的连接资源并没有得到很好的重复利用-->>若同时又几百人甚至几千人在线,-->>频繁的进行资料库连接操作将占用很多的系统资源,严重的甚至会造成伺服器崩溃

  • 资料库连接池

1.什么是「池」?

保存对象的容器

2.什么是资料库连接池?

保存资料库连接对象的容器

3.作用

初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,

用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。

4.详细说明

资料库连接池的基本思想就是为资料库连接建立一个「缓冲池」

与现在缓冲池中放入一定数量的连接,当需要建立资料库连接时,只需要从「缓冲池」中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与资料库连接可以通过连接池的管理机制监视资料库的连接的数量,使用情况,

为系统开发,测试及性能调整提供依据

5.示意图

连接对象以链表List形式存放,已释放的连接,放到最后。

从最前面获取连接对象

  • 连接池中的属性


3.连接池分类——常见的连接池


4.DBCP连接池使用

需要注意的是这里的DataSource数据源等价于连接池Connection Pool 只是叫法不一样

我们在JDBC里面的DataSource和其它应用中的DataSource不是一个东西,不要混淆了

具体使用:

  • 导入相关jar包

commons-dbcp-1.4.jar

commons-pool-1.5.6.jar

大家可以自行去官网下载 懒得找的话我这里放出链接

pan.baidu.com/s/1JPp_ia

解压

  • 修改代码

修改获取连接的方式 由DriverManager改为资料库连接池

因此不再需要载入驱动

getConn方法的返回值也由资料库连接池返回


5.配置文件

配置文件就是以.properties作为扩展名的文件

JDBCUtil当中的用户名,密码这些信息偶读写到了文件当中,不便于维护

这时我们就需要把这些用户名密码地址信息等存储到一个专门的文件中,与我们的代码分隔开

配置文件的书写:

我们要做的就是JDBCUtil类中的这些地址信息拿出来 放在一个配置文件中

操作实验:

首先在src文件夹中new一个file

PS:在开发中我们不是直接放src里面的 而是在项目Project中单独创建一个文件夹

注意 不是Folder 而是Source Folder 命名为resource资源文件

这样干是有区别的 Source Folder里面的内容会被编译到bin目录中去 而Folder则不会

将地址等信息拿过来 并将前面的数据类型string双引号删掉

最好把空格也删掉 因为读取的时候有可能把空格也读取了 导致出错

然后我们在需要获取这些地址信息的JDBCUtil类中加上如下代码 读取这些信息

new FileInputStream的时候会报异常 因为有可能地址不存在 我们这里先抛出


6.配置文件改写DBCP

new一个SourceFolder文件 并将地址等信息放在里面

注意 变数名称key值不能瞎写 DBCP规定了这些变数名称

回到JDBCUtil 改写代码

这里放一张图回顾一下以前是怎么写的


7.Druid德鲁伊 阿里巴巴出的连接池

下方是官方文档的说明

只需要将BasicDataSource改写为DruidDataSource就行

首先导包

https://pan.baidu.com/s/1fryNcipQqWEXbcSswtrhVw?

pan.baidu.com

把第一个搞到lib里面 然后bulid path

修改代码 导第一个包

finish!


8.总结与感谢

本知乎几乎是复述高新强老师的javaweb网课,我只是整理整理笔记,供自己和大伙复惯用,再次感谢高新强老师


推荐阅读:
查看原文 >>
相关文章