连接池原理介绍及应用

java分享会

分享人:秦永辉

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

        池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。

        数据库连接”是一种稀缺的资源,建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。为了保障网站的正常使用,应该对其进行妥善管理。其实我们查询完数据库后, 如果不关闭连接,而是暂时存放起来,当别人使用时,把这个连接给他们使用。就避免了一次建立数据库连接和断开的操作时间消耗。

2.知识剖析

连接池关键问题分析

1 并发问题;

2 多数据库服务器和多用户;

3 事务处理;

4 连接池的分配与释放;

5 连接池的配置与维护。

连接池的实现

1 连接池类;

1.1 连接池类是对某一数据库所有连接的“缓冲池

1.2 从连接池获取或创建可用连接

1.3 使用完毕之后,把连接返还给连接池

1.4 在系统关闭前,断开所有连接并释放连接占用的系统资源

1.5处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值

2 连接池管理类;连接池管理类的引入主要是为了方便对多个连接池的使用和管理,如系统需要连接不同的数据库,或连接相同的数据库但由于安全性问题,需要不同的用户使用不同的名称和密码。

2.1 连接池管理类是连接池类的外覆类(wrapper),符合单例模式,即系统中只能有一个连接池管理类的实例。其主要用于对多个连接池对象的管理

2.2 装载并注册特定数据库的JDBC驱动程序

2.3 根据属性文件给定的信息,创建连接池对象

2.4 为方便管理多个连接池对象,为每一个连接池对象取一个名字,实现连接池名字与其实例之间的映射

2.5 跟踪客户使用连接情况,以便需要时关闭连接释放资源

数据库的连接

1 装载数据库驱动程序

2 通过jdbc建立数据库连接

3 访问数据库,执行sql语句

4 断开数据库连接,释放连接资源

实现连接池的步骤

1 编写class 用作连接池

2 在class构造器里一次性创建若干个连接,将连接保存LinkedList中

3 实现getConnection 从 LinkedList中返回一个连接

4 操作完后,提供将连接放回连接池中方法

连接池测试

1 从刚刚写的连接池里面获取连接

2 进行数据库操作

3 操作完成后,把连接返回给连接池

4 具体看详细操作

3.常见问题

1 无法获取数据库连接

2 运行一会儿报错了

4.解决方案

1 无法获取数据库连接

1.1 无法获取数据库连接的原因,最简单的就是没添加依赖

1.2 其次是驱动用户名密码等写错了

1.3 也有可能没启动数据库服务或者没开放连接权限

1.4 还有一种情况就是,读取配置文件的时候出错,导致连接池初始化失败

2 运行一会儿报错了

2.1报错,可能是因为断网了,一直连不上数据库,所以报错了

2.2或者是最大连接数用完了,还在请求创建连接

5.编码实战

6.扩展思考

1 连接池有几种?

2 连接池有什么好处

3 如何选取连接池

7.参考文献

https://www.cnblogs.com/xdp-gacl/p/4002804.html

https://www.cnblogs.com/linjian/p/4831088.html

https://blog.csdn.net/l1028386804/article/details/51162560

https://blog.csdn.net/qq_36026721/article/details/53494838

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 秦永辉