数据库连接池

数据库连接池

传统的数据库连接:

Class.forName("com.mysql.jdbc.Driver");
String name = "root";
String password = "123";
String url = "jdbc:mysql://127.0.0.1:3306/mydb";
Connection conn = DriverManager.getConnection(url, name, password);

传统的JDBC访问数据库技术,每次访问数据库都需要通过数据库驱动器Driver和数据库名称以及密码等资源建立数据库连接。

这样的连接存在两大问题:

  1. 频繁的建立数据库连接与断开连接数据库,会消耗大量的资源和时间,降低性能;
  2. 数据库的连接需要用户名和密码等等,这些需要一定的内存和CPU开销;

Mysql的通讯协议是基于TCP传输协议的,建立连接的过程:

  1. 建立TCP连接,通过三次握手实现;
  2. 服务器发送客服端握手信息,客户端响应该握手信息
  3. 客服端发送认证包,用于用户验证,验证成功后,服务器返回OK响应,之后开始执行命令。

用户验证成功之后,会进行一些连接变量的设置,比如字符集、是否自动提交事务等,期间会有多次数据的交互。

整个数据库连接的交互可以看出,数据在客户端和服务器之间需要至少往返7次,从时间上来看大概建立一次连接就是200ms;

一般数据库连接的缺点:

  1. 网络IO较多
  2. 数据库的负载较高
  3. 响应时间较长及QPS较低
  4. 应用平凡的常见连接和关闭连接,导致临时对象较多,GC频繁
  5. 关闭连接后,会出现大量TIME_WAIT 的TCP状态(在2个MSL之后关闭)

连接池的工作原理:

  1. 连接池的建立

    1. 常见的连接池这里就不详细说了,连接池一般在系统初始化的时候,会根据配置文件中的配置属性进行建立,创建连接对象(连接数量)的过程在这里完成,
  2. 连接池管理

    1. 数据库连接的管理肯定是池子的核心了,其有专门的管理策略:

      ​ 当用户请求数据库连接时,首先查看池子中是否有空闲连接,如果存在空闲连接则将连接分配使用;如果没有空闲连接,则查看当前所开连接时是否已经达到了最大连接数,如果没有达到就重新创建一个连接给请求的用户;如果达到就按中设定的最大时间进行等待,如果超过最大等待时间,则抛出异常给用户;(这里涉及到很多配置文件对数据库连接池的配置信息,后面讲连接池的时候在详细补充)

  3. 连接池的关闭

    1. 应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源。

数据库连接池种类

连接池详细的就不介绍了,常见的连接池主要有c3p0,DBCP,HikariCP,Druid;其中Druid实现了对数据源的监控功能,HikariCP是springboot2.x默认的使用的数据库连接池。

连接池常见配置:

参数描述默认值解释
connectionTimeout等待来自池的连接的最大毫秒数30000如果小于250毫秒,则被重置回30秒
idleTimeout连接允许在池中闲置的最长时间600000如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);如果idleTimeout!=0且小于10秒,则会被重置为10秒
maxLifetime池中连接最长生命周期1800000如果不等于0且小于30秒则会被重置回30分钟
minimumIdle池中维护的最小空闲连接数10minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize
maximumPoolSize池中最大连接数,包括闲置和使用中的连接10如果maxPoolSize小于1,则会被重置。当minIdle<=0被重置为DEFAULT_POOL_SIZE则为10;如果minIdle>0则重置为minIdle的值

推荐文章:https://blog.csdn.net/qq_36528311/article/details/87264571

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值