时间:2024-04-24
李殿环
摘要:本文章对基于Java语言的数据库访问中出现的问题进行了分析,提出了能改善数据库访问的连接池技术并构造了基于Java语言的连接池实例。
关键词:Java 数据库 连接池
引言
Java语言的跨平台性、可移植性及安全性等特性,使其应用越来越广泛。在使用Java语言和数据库有关的应用开发中,一般使用JDBC来进行和数据库的交互,直接通过连接,应用程序就可以从数据库中访问数据。但对一个复杂的数据库应用来说,需要消耗大量的时间,造成了系统性能的瓶颈。这时如果采用利用连接池技术,可以使数据库连接得到高效、安全的复用,从而使系统性能获得显著的改善。
一、连接池的工作原理
(一)问题分析及解决方案
在应用程序与数据库的交互过程中,通过JDBC与数据库建立连接是一项相当消耗系统资源的连接过程。简单地利用JDBC提供的API频繁地与数据库建立和关闭连接,会导致系统整体性能严重下降,因为连接频繁使用成了系统性能的瓶颈。但是通过建立一个数据库连接池以及相应的管理策略,会使得一个数据库连接可以得到高效安全的复用,避免了数据库连接的频繁建立和关闭的开销,提高了系统的效率。
(二)工作机制
连接池提供一种管理机制来控制其内部连接对象的个数,并提供应用程序使用的获取、释放连接接口。连接池主要由3部分组成:连接池的建立、连接池中连接的使用管理、连接池的关闭。下面就着重讨论这3部分及连接池的配置问题。
(1)连接池的建立。连接池建立时,根据配置,连接池从数据库中一次性获取预设数目的连接对象。这些连接对象作为系统可分配的自由连接,以后所使用的连接都从连接池中获取,这样可避免随意建立、释放连接所带来的开销。
(2)连接池管理策略。连接池管理策略是连接池机制的核心。当用户应用连接池请求数据库连接时,先查看池中是否有没有被分配的空闲连接,如果存在,则把空闲连接分配给客户,并作相应处理;如果池中没有空闲连接,则等待直到有空闲连接分配给客户,此时该连接被多个用户复用。当客户释放连接时,唤醒所有等待连接的客户线程并做相应的处理。如果连接释放后没有等待连接的客户线程,则把它重新放回连接池中,并不关闭连接。由此可知:连接池能保证数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。
(3)连接池的关闭。当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。
(4)连接池的配置。数据库连接池中到底要放置多少个连接,连接耗尽后该如何处理呢?这是一个配置策略。这里的配置策略是:根据具体的应用需求,给出一个初始的连接池连接数目以及一个连接池可以扩张到的最大连接数目。
二、连接池实现
下面利用Java语言,建立一个名为ConnPool的连接池,并以此为例来看看连接池的实现。ConnPool实现连接池基本功能,内部类connBean实现对连接管理。
ConnPool的基本属性如下:
driver:JDBC驱动程序名url:数据源名称size:最大连接数username:用户名
password:口令connBean:连接对象(内部类ConnBean的实例)
pool:连接池(Vector类型,连接对象集合)
ConnPool所需要的基本接口:
private Connection createConnection()lhrows Exception{//建立連接)
D rivate void addConnection(ConnBean connBean)(//把连接加入连接池
public synchronized voidinitializePool()throws Exception(//连接池初始化)
public synchronized ConnectiongetConnection()throws Exception(//置使用标记)
public synchronized voidreleaseConnection(Connection con)(//置未用标志)
public synchronized voidemptyPool(){//关闭所有连接}
public class ConnBean{//ConnBean内部类实现}
通过这几个接口,可以完成连接池的基本管理。因为要保存每一个连接的状态,所以还需要一个数据库连接对象,此时可以用ConnBean内部类实现。
连接池经实例化后,由方法initialiaePool()读取db.properties文件内容,并调用方法createConnection()打开数据库的连接,并获取size数目的连接数。连接池提供的两个同步方法getConnection()和releaseConnection()用来管理连接池中的连接分配和归还,JSP服务线程调用getConnection()后从pool获取一个连接,并置其连接标志为已用。如果没有可用连接使当前线程处于等待状态。JSP服务线程完成对数据库的操作后,应调用releaseConnection(),方法归还连接,并激活处于等待状态的线程,这样就基本实现了简单的连接池。各JSP页面能够复用连接池内的连接对象,只要根据实际情况选择合适的最大连接数,使用连接池对提高系统整体性能大有好处。
三、结束语
此连接池非常简易,仅能完成连接池基本功能,适用于一般小型应用。总之,在数据库系统开发中,使用连接池技术能减小系统开销,提高系统整体性能,建议在应用系统开发中,充分利用连接池技术,构造高性能的数据库应用。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!