10.13JDBC之数据库连接池

10.13JDBC之数据库连接池

传统的基于数据库的Web程序模式

  • 主程序(Servletbean)中建立数据库连接

  • 进行sql操作

  • 断开数据库连接

存在的问题

  1. 普通的JDBC数据库使用DriverManager获取,每次向数据库建立连接的时候都要将Connection加载到内存中,在验证用户名和密码,通过了以后执行操作,执行完毕在断开连接

  2. 消耗大量的资源和时间,数据库的连接资源没有得到很好的重复利用

  3. 每一次数据库连接,使用完以后都得断开连接,如果程序出现异常未能关闭,导致数据库系统中的内存泄露,最终将导致数据库重启连接

  4. 不能控制被创建的连接对象数,连接过多会导致内存泄露,服务器崩溃。

Java的内存泄露是指内存中存在对象不能被回收

C的内存泄露是指指向内存区域的指针丢了

接触到的池:

  • 字符串常量池

  • 线程池

  • 数据库连接池

数据库连接池技术

数据库连接池的基本思想:

为数据库连接建立一个"缓冲池",与现在缓存池当中存放一定数量的连接。需要建立连接时先从"缓冲池"取一个出来,用完再放回去。

数据库连接池的作用:

  1. 分配、管理、释放数据库连接。

  2. 允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个

数据库连接池的特点:

  • 初始化时创建一定数量的数据库连接,这些连接的数量由最小数据库连接数确定。最大数据库连接数量限定了这个连接池能占有的最大连接数。

  • 当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中

数据库连接池原理

 

  • 开始预设几个数据库连接线程。线程状态为free

  • 每有一个线程进行占用链接状态就会由free变成busy

  • 使用完成以后调用方法Connection.close()将连接状态由busy又变为free--->归还的时候修改事务提交的状态为自动提交

  • 超过连接池数量的线程访问数据库连接,进行等待

多种开源的数据库连接池

特点:

  • JDBC的数据库连接池用javax.sql.DataSource表示,DataSource只是一个接口

  • DataSource接口由服务器(`Weblogic, WebSpher,Tomcat)和一些开源组织提供实现:

    • DBCP:Apache提供的数据库连接池,Tomcat服务器自带dbcp数据库连接池,速度相对c3p0较快,但自身存在BugHibernate3已经不再提供支持。--->主要讲

    • C3P0:一个开源组织提供的数据库连接池,速度相对较慢,稳定性可以Hibernate官方推荐使用--->主要讲

    • Proxool:Sourceforge下的一个开源项目,能监控连接池状态稳定性比C3P0差一些

    • BoneCP:开源组织提供,速度快

    • Druid:阿里提供的数据库连接池,速度不确定是否有BoneCP--->主要讲

  • DataSource通常被称为数据源,包含连接池和连接池管理。习惯上把DataSource称为连接池

  • DataSource用来取代DriverManager来获取Connection,获取速度快,可以大幅度提高数据库访问速度

原文地址:https://www.cnblogs.com/JunkingBoy/p/15464334.html