目录

一、JDBC数据库连接池

1、应用程序直接获取数据库连接的缺点

2、JDBC数据库连接池的必要性

二、数据库连接池技术

1、数据库连接池的基本概念

2、数据库连接池的基本思想

3、数据库连接池的工作原理

4、数据库连接池技术的优点

三、多种开源的数据库连接池


一、JDBC数据库连接池

1、应用程序直接获取数据库连接的缺点

用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。如下图所示:

2、JDBC数据库连接池的必要性

在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:

  • 在主程序(如servlet、beans)中建立数据库连接

  • 进行sql操作

  • 断开数据库连接

这种模式开发,存在的问题:

  • 普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用。若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。
  • 对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。(回忆:何为Java的内存泄漏?)
  • 这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

二、数据库连接池技术

1、数据库连接池的基本概念

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正式针对这个问题提出来的。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。如下图所示:

2、数据库连接池的基本思想

为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

3、数据库连接池的工作原理

4、数据库连接池技术的优点

(1)资源重用

由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。

(2)更快的系统反应速度

数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间。

(3)新的资源分配手段

对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源。

(4)统一的连接管理,避免数据库连接泄漏

在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露。

三、多种开源的数据库连接池

1、JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现,也有一些开源组织提供实现:

(1)DBCP 是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对C3P0较快,但因自身存在BUG,Hibernate3已不再提供支持。

(2)C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以,hibernate官方推荐使用。

(3)Proxool 是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点.

(4)BoneCP 是一个开源组织提供的数据库连接池,速度快。

(5)Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。

2、DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池。

3、DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。

特别注意:

(1)数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂,因此整个应用只需要一个数据源即可。
(2)当数据库访问结束后,程序还是像以前一样关闭数据库连接:conn.close();但conn.close()并没有关闭数据库的物理连接,它仅仅把数据库连接释放,归还给了数据库连接池。

Java之JDBC连接池详解相关推荐

  1. Spring Boot 使用 Druid 连接池详解

    Spring Boot 使用 Druid 连接池详解 Alibaba Druid 是一个 JDBC 组件库,包含数据库连接池.SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过严苛的 ...

  2. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

  3. python requests 异步调用_构建高效的python requests长连接池详解

    前文: 最近在搞全网的CDN刷新系统,在性能调优时遇到了requests长连接的一个问题,以前关注过长连接太多造成浪费的问题,但因为系统都是分布式扩展的,针对这种各别问题就懒得改动了. 现在开发的缓存 ...

  4. java连接池详解与自定义es连接池

    目录 1 版本选择 2 依赖选择 3 使用commons-pool构造连接池 3.1 pom.xml 3.2 对象池类 GenericObjectPool普通对象池 GenericKeyedObjec ...

  5. java 线程与线程池详解

    并发:同一时刻,多任务交替执行,造成一种"貌似同时"的错觉.简言之,单核cpu实现的多任务就是并发. 并行:同一时刻,多任务同时执行.多核cpu可实现并行. 在创建线程时,可以使用 ...

  6. Java使用Jco连接sap详解

    SAP的R/3系统与Java平台一样有着许多类似的技术理念,以及同样广泛的企业级用户,但是它们完全是两个不同的世界.当用户面临流程 或者数据整合方面的需求的时候,就迫切需要一种高效的方式,在R/3系统 ...

  7. jedis连接池详解(Redis)

    转自:http://tianxingzhe.blog.51cto.com/3390077/1684306 原子性(atomicity): 一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都 ...

  8. Redis Lettuce客户端异步连接池详解

    前言 异步/非阻塞编程模型需要非阻塞API才能获得Redis连接.阻塞的连接池很容易导致阻塞事件循环并阻止您的应用程序进行处理的状态.Lettuce带有异步,非阻塞池实现,可与Lettuces异步连接 ...

  9. Hyperf连接池详解

    开头语 Hyperf官网介绍了为什么要使用连接池及连接池的简单案例,但是对新手却不太友好,不过我还是想基于官方文档,来做一篇更深的讲解. 先来看看官方文档对于连接池的介绍 为什么要使用连接池 当并发量 ...

  10. Mysql连接池详解——原理部分

    引言 为什么要使用连接池 线程池如何配合连接池使用, 连接池和线程池数量 不能根据经验值直接设置,需要根据io同步的具体时间去测试得到最优的值 同步连接池和异步连接池的区别 连接池的扩展 一.池化技术 ...

最新文章

  1. mysql8.0.22 win7_现在还能不能下载到正版WIN 7
  2. The Simple Life
  3. Flex命令行学习总结
  4. 密码流 PassWord.java
  5. Python 装饰器实例
  6. SonicWall 防火墙曝严重漏洞,有些设备仍无补丁
  7. Diffusion Models:生成扩散模型
  8. 音频处理之回声消除及调试经验
  9. hp probook fn_如何在HP ProBook(或兼容笔记本电脑)上安装Mac OS X Lion
  10. Android 最常用的设计模式二 安卓源码分析——组合模式(component)
  11. [转载][不转不行了^皿^]金庸小说中的十大“公司”
  12. 打印DPI如何与计算机DPI一致,ps打印尺寸怎么设置和实际纸张一致? -电脑资料
  13. 抓握手包破解wifi密码前传:WPA/WPA2加密小结
  14. 如何查看源代码及一些代码的解释
  15. sprint 1 总结
  16. GLSL到HLSL参考
  17. python提取数列数字_从pandas datafram中的列中提取字符串中的数字
  18. 大数据时代从繁乱冗杂中精准提取核心文本信息 × Python Tkinter 生成词云图
  19. 如何下架自己的 APP(APP Store)
  20. JAVA第10课:标识符的定义及规则

热门文章

  1. CSDN有奖任务答案
  2. 推荐几个偷网站的小工具
  3. rstp 转hls_海康大华RTSP转HLS直播
  4. visio教程仓库流程图_完整的VISIO教程(绝对干货)
  5. 复杂网络研究及其前沿概述
  6. 单片机万年历阴阳历c语言,51系列单片机的一种万年历优化算法源程序
  7. CentOS下通过代理安装rails
  8. Google翻译api接入及Java、Python实现
  9. 推箱子视频教学Java,推箱子游戏教学视频
  10. 盒子模型及层模型【定位】