Skip to content

Latest commit

 

History

History
36 lines (28 loc) · 3.44 KB

数据库连接池.MD

File metadata and controls

36 lines (28 loc) · 3.44 KB

[参考链接】https://blog.csdn.net/qq_36528311/article/details/87264571

问题的发现:

在学校写web项目的登录功能的时候需要用到数据库的连接,想到之前自己写java项目的时候那个时候数据库连接使用的方法是每次请求就直接创建一个连接然后进行sql语句的进行,这次上网看到数据库连接池的技术,看完后想自己写一篇博客记录一下这项技术

1.为什么要用?

背景: 用户的每一次请求都需要与数据库获得连接,然后数据库创建每一次连接都要消耗很大的资源并且创建的时间也很长

问题:如果一个网站一天有几十万级别以上的访问量,那么数据库服务器就需要创建几十万次级别的连接,这就浪费了数据库的资源,容易导致数据库服务器内存溢出,拓机等等 传统数据库创建连接

2.升级方案——数据库连接池

既然数据库的连接是一项非常耗资源的过程,对数据库连接的管理能影响到整个应用程序的伸缩性和健壮性那么数据库连接池就是对这个问题提出来的,数据库连接池负责分配,管理和释放数据库连接,它允许应用 程序重复使用一个现有的数据库连接,而不是每次需要时去创建 数据库连接池创建连接

3.数据库连接池的初始化

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,连接的数量是由最小数据库连接数决定的不管这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量.连接池的最大数据库连接数量 限定了这个连接池能占有的最大连接数当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中.定义:最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费. 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作 如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接.不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,他将被放到连接池中等待重复使用或是空间超时后被释放.

4.数据库连接池接口

编写连接池需实现java.sql.DataSource接口,这个接口定义了两个重载的getConnection方法:.Connection getConnection( ).Connection getConnection(String username,String password)

5.接口实现方法

.Connection getConnection(String username,String password.Connection getConnection(String username,String password) 1.在DataSource构造函数中批量创建与数据库的连接,并把创建的连接利用LinkedList这个数据结构存起来

2.每次调用getConnection这个方法时,就从LinkedList里面取到一个Connection返回给用户

3.当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中