一、简介  

动态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. 详解ASP.NET MVC应用程序请求生命周期

    ------转载当一个ASP.NET MVC应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在ASP.NET MVC应用程序Http request 和Http response 过程中, ...

  2. [转]PageRank算法

    原文引自: 原文引自: http://blog.csdn.net/hguisu/article/details/7996185 感谢 1. PageRank算法概述 PageRank,即网页排名,又称 ...

  3. 关于laravel框架的Auth::attempt验证失败

    按照官方文档进行认证 发现不管怎么样都是失败 if (Auth::attempt(array('email' => $email, 'password' => $password), tr ...

  4. java学习笔记(10) —— ActionContext、ServletActionContext、ServletRequestAware用法

    核心思想 1.ActionContext HttpServletRequest getAttribute setAttribute ActionContext get put //ActionCont ...

  5. AudioServicesPlaySystemSound音频服务—b

    对于简单的.无混音音频,AVAudio ToolBox框架提供了一个简单的C语言风格的音频服务.你可以使用AudioservicesPlaySystemSound函数来播放简单的声音.要遵守以下几个规 ...

  6. ssh公钥自动登陆

    第一步,在服务器上安装ssh服务 sudo apt-get install ssh 通过ssh -v查看是否安装成功 第二步创建本地公钥秘钥对 ssh-keygen -t rsa  //创建ssh公钥 ...

  7. web api 2 学习笔记 (OData Batch request)

    之前介绍过OData 中实现RPC的写法,今天在来一个批量操作. 参考 : https://damienbod.wordpress.com/2014/08/14/web-api-odata-v4-ba ...

  8. ural 1192 Ball in a Dream

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  9. Android开发程序获取GPS信息步骤

    1.获取LOCATION_SERVICE系统服务.2.创建Criteria对象,调用该对象的set方法设置查询条件.3.调用LocationManager.getBestProvider(Criter ...

  10. ExpandableList列表的简单应用

    package com.test;//Download by http://ww.codefans.netimport java.util.ArrayList;import java.util.Has ...