一、简介  

动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问。连接数据库不仅要开销一定的通信和内存资源,还必须完成用户验证、安全上下文配置这类任务,因为往往成为最为耗时的操作。

  如果某个基于数据库的应用系统只需建立一次初始连接或者使用很少的打开、关闭数据库连接操作就可以完成工作,那么,系统的性能会得到显著的改善。实现这种思路的方法是:使多个请求能够共享同一个连接。连接池很好地满足了这样的要求,由连接池来管理数据连接的建立和注销,初始化时建立多条连接,以供客户使用。

  用JSP开发Web应用系统,多数是基于数据库的程序,建立数据库连接的操作将是消耗系统资源最大的操作之一,如何减少这种开销,是开发人员应该首要关注的问题。

  

  如何开发基于数据库的Web系统的传统模式:

  1、在JavaBeans或者Servlet中建立数据库连接。

  2、在页面(JSP等)中调用JavaBeans获取连接,执行Sql操作并返回结果集。

  3、断开数据库连接。

  连接池技术:

  由连接池来管理数据库连接的建立和注销。连接池初始化时建立多条连接,供给不同的请求使用,多个请求可以共享同一连接,这样做,就可以减少打开、关闭数据库连接的操作,从而改善了系统的性能。

二、连接池原理介绍

  顾名思义,连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用。

  一个连接池“拥有”一定数量的连接,当客户程序发出数据库连接请求时,连接池会从“池”中取出一个空闲的连接给客户程序,并将该连接状态设置成已占用;当客户程序使用完毕后,不会真正关闭这个连接,只是将其放回“池”中,同时将连接状态设置成空闲。如果“池”中没有空闲的连接,连接池可以根据某种策略自动地建立一个或多个连接,供后面的程序使用。

  可见,连接的建立、断开以及一个池可以拥有的最大连接数都由连接池自身管理,客户程序可以不再关系这类事情,这样就实现了连接的共享,提供了 每个连接的利用效率。

三、设计思路

  使用连接池的目的是想通过其自身的管理机制来管理数据库连接的状态和使用情况,包括管理连接池内连接的最大数、最小数、稳定数、连接时间、可用连接等等。因此,一个连接池管理类应该具有以下属性:

  poolMaxSize: 最大连接数

  poolSteadySize: 稳定大小

  poolInitSize: 初始化大小

  validPooledConnList: 容纳可用的缓冲数据库连接对象的容器——可用池

  allPooledConnList: 所有的缓冲对象(可用的、不可用的)的容器——管理池

  连接池的自由管理:静态管理、动态管理

  静态管理:

  静态管理是在客户程序发出请求时,连接池会检查各个连接的状态,并提供可用连接。运用连接池做一次连接的过程如下:

1. 初始化连接池,new 一定量的connection.

2. 客户程序发出访问数据库的请求,连接池查找可用连接,如果找到,则直接返回一个连接。

3. 如果没有空闲连接,则重新new 一个connection并且把它放到池里,然后返回这个connection.

4. 如果连接池满了,程序是会停止new新的connection,客户程序可以调用连接池的release方法释放掉旧的连接。

  动态管理:通过一个线程定时地对每个连接的状态、连接的数量进行判断而进行相应的操作。

public class ConnectionPool {
public boolean initialize() {
//连接池的初始化
return true;
} public void destroy() {
//连接池的销毁
} public synchronized PoolConn getConnection() {
//获取一个连接
} public synchronized void close() {
//关闭一个连接
} private synchronized void removeFormPool() {
//把一个连接从连接池中移除
} public static synchronized void packPool() {
//维护连接池的大小
}
}

  通过这几个方法,已经可以完成连接池的基本管理。因为我们要保存每一个连接的状态,所以还需要一个数据库连接对象

class ConnObject {
private java.sql.Connection conn;
public java.sql.Connection getConn() { } public void closeConn() { }
}

  这样,在连接池中操作的连接对象是ConnObject,当其他程序访问数据库时需要的只是ConnObject的conn属性,因为我们再加入一个类,封装这个实际的数据库连接对象,作为其他程序获得和释放数据库连接的方法。

class ConnBean {
public java.sql.Connection getConnection();//从连接池中取出一个有效的连接
public void releaseConnection();//释放连接,此时并没有关闭连接,只是将连接放回连接池中 protected void setConnection(java.sql.Connection conn);
void destroyPool();//销毁连接池
}

Java为什么使用连接池的更多相关文章

  1. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

  2. java JDBC (八) 连接池 DBCP

    package cn.sasa.demo1; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; ...

  3. Java 自定义FTP连接池

    转自:https://blog.csdn.net/eakom/article/details/79038590 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  4. java使用DBCP连接池创建工具类

    1.说明 java中有个扩展包 javax下面有个DataResource的接口  javax.sql.DataResource 该接口定义了连接池的方法规范 而DBCP框架有apache公司开发,他 ...

  5. MySQL_(Java)【连接池】简单在JDBCUtils.java中创建连接池

    MySQL_(Java)[事物操作]使用JDBC模拟银行转账向数据库发起修改请求 传送门 MySQL_(Java)[连接池]使用DBCP简单模拟银行转账事物 传送门 Java应用程序访问数据库的过程: ...

  6. Java之ConnectionPool连接池

    1.初始化(根据配置信息进行初始化)2.产生一个新的数据库连接3.有存储已经使用的连接集合,空闲连接集合4.提供给外部调用获取连接的方法5.提供给外部释放连接(不是关闭连接,而是将连接闲置)6.销毁连 ...

  7. Java Hibernate 之连接池详解

    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.在配置连接池时需要注意的有三点: 一.Apche的DBCP在Hibernate2中受支持,但在Hiber ...

  8. Java之JDBC连接池

    数据库连接池 连接池的概述 概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时, 从容器中获取连接对象,用户访问完之后 ...

  9. Java中JDBC连接池&JDBCTemplate

    数据库连接池 概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归 ...

随机推荐

  1. js获取当前日期时间同时显示星期

    JavaScript获取当前日期时间同时显示星期几,具体代码如下: <html> <head> <meta http-equiv="Content-Type&q ...

  2. (转)精通 JS正则表达式

    精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证  ...

  3. 《CSS网站布局实录》学习笔记(四)

    第四章 CSS网站元素设计 4.1 网站导航 网站导航是网站中最重要的元素.从形式上看,网站导航主要分横向导航.纵向导航.下拉及多级菜单导航灯3种常见形式. 横向导航:作为门户网站的设计而言,主导航一 ...

  4. Covariant Returen Types(协变返回类型)

    基类virtual func返回类型为某个类(class Super)的ptr或ref,子类重写的virtual func返回类型可改为该类子类(class Sub : public Super)的p ...

  5. Mysql 5.6 Cmake 编译安装

    MySQL编译安装 环境: OS: CentOS 6.6x64 mini mysql: mysql-5.6.251. mysql 下载: http://dev.mysql.com/downloads/ ...

  6. eclipse在当前项目里面批量替换所有单词

    ctrl+f里面只能单个文件用,要整个项目批量替换. 1. 先选中你要替换字符串, 2. 再菜单栏中找到Search→Text→Project,这样就会在整个项目中查找单词. 3. 然后在Search ...

  7. Javascript 中神奇的 this

    Javascript 当中的 this 与其他语言是完全不同的机制,很有可能会让一些编写其他语言的工程师迷惑. 1. 误以为 this 指向函数自身 根据 this 的英语语法,很容易将函数中出现的  ...

  8. 关闭Centos的自动更新

    昨天跟老板汇报,提到我们的linux服务器每天自动更新,老板大发雷霆,说生产系统不能够这样,非常不安全,一个师兄也提到他原来在移动的时候,服务器更新也是很谨慎的事情.看来我的思维太技术了,不够全面,所 ...

  9. Java Tomcat 中调用.net DLL的方法

    近日一个java的项目,客户要求项目中必须使用其提供的加密机制,扔给了两个.net写的DLL.网络上搜了一圈也没找到啥东西,甚至看到人扬言此事绝无可能.郁闷当中考虑了一个思路.用C#做一个Com,调用 ...

  10. 性能测试工具--SIEGE安装及使用简介

    官方网站http://www.joedog.org/ 概述 Siege是一个多线程http负载测试和基准测试工具.它有3种操作模式: 1) Regression (when invoked by bo ...