JDBC—连接池

为什么需要使用数据库连接池

  • 普通的JDBC数据库连接(Connection对象) 使用 DriverManger 获取,每次向数据库建立连接的时候都要将 Connection 加载到内存,在验证用户名和密码(得花费0.05S-1S的时间) ----> 建立JDBC连接得开销是很大的

  • 需要数据库连接的时候,就向数据库获取一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用.若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。

  • 对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。

  • 这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃.

 

连接池

连接池图解

连接池

连接池中的Connection对象 预先存在吗?

  • 应用启动成功之后,就在连接池中预先存储5个Connection对象,就像你去火车站买票,是你去了火车站就有卖票窗口,还是去了火车站给你现场搭建卖票窗口

初始连接数:

  • 你去火车站买票时,卖票窗口就已经存在了。

最大连接数:

  • 春运期间,去火车站买票的人很多,既有的窗口已经无法满足买票需求,就会新增窗口,但是新增窗口是有上限的,并不是无限新增,设置最多新增数20,即同时最多只能有20个窗口卖票。
  • 连接池初始化时只有5个连接对象,将最大连接数设置为20个。当5个客户端 占有了5个连接对时,连接池中就没有连接对象了,这时第6个客户端,第7个客户端来获取连接对象时,就会在为它们新增2个连接对象,但是最多只能有20个

最小连接数:

  • 在不是旅游高峰期和春运时,买票人不是很多,尤其是在凌晨时,没有必要开5个卖票窗口,这时可以关闭3个窗口。只留下两个窗口

最大等待时间:

  • 当20个连接对象都被占有时,设置一个最大等待时间,如果过了最大等待时间,则提示系统繁忙

最大连接时间 :

  • 避免占着茅坑不拉屎情况,如果20个 连接对象都被获取,而这20个连接一直什么都不做,也不归还连接对象,这样后边的客户端将陷入无须等待

连接池得最大好处:重复利用了每一个Connection对象,节省了性能开销

连接池概述

在Java中,使用 javax.sql.DataSource 接口来表示连接池/数据源

注意:DataSource 和 JDBC 一样仅仅是一个接口,由各大服务器厂商来实现

常用的DataSource 的实现

  • C3P0:Hibernate 推荐,但是该连接池在07年之后就不在更新了,不建议使用:性能差
  • DBCP:Apache 组织的项目,Spring推荐
  • Druid::阿里巴巴的项目(又称德鲁伊),号称宇宙第一强,性能超群,世界上最好的连接池

使用连接池和不使用连接池的区别在哪里?

  • 如何获取连接对象
    • 没有使用连接池则通过DriverManager 来获取,直接从DBMS 连接
    • 使用连接池则直接通过连接池获取 (DataSource对象.getConnection())
  • 释放连接对象
    • 没有连接池:conn.close()直接和数据库服务器断开连接
    • 存在连接池:conn.close()是把Connection对象归还给连接池,并没有断开与数据库服务器的连接

不同的连接池创建DataSource 对象的方法和配置不一样,操作连接池最重要的是如何获取DataSource对象

连接池的详细使用

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值