JDBC数据库连接池技术简介及设计

时间:2022-09-27 02:56:42

JDBC数据库连接池技术简介及设计

摘要:该文介绍了Java访问数据库的原理及其存在的问题,提出了解决办法-数据库连接池,并对其关键问题进行了分析,构建了一个简便易用的连接池并结合当前热门技术Servlet说明了其如何在开发时使用。

关键词:JDBC;Web;数据库连接池

中图分类号:TP312文献标识码:A文章编号:1009-3044(2010)08-1793-02

About JDBC Database Connection Pool Technology and Design

ZHANG Yin, DU Wei

(Anhui University of Traditional Chinese Medicine, Hefei 230031, China)

Abstract: This paper describes the principles of Java to access the database and existing problems, propose a solution-database connection pool, and an analysis of its key issues, building an easy-to-use connection pooling and the combination with the current hot technology, explained its Servlet How do I use in the development.

Key words: JDBC; Web; connection pool

随着Internet技术和数据库应用的快速发展进步,计算机应用程序已从传统的桌面单机应用转到Web在线应用。众多基于Web架构应用程序的开发技术中, Sun公司推出的基于Java语言的Servlet+Jsp+JavaBean技术架构是应用范围较大的一个,相对于传统的开发技术,具有高效、跨平台、安全、有效、可移植等特性,这使其更便于开发维护。

1 Java应用程序访问数据库的基本原理

在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通联系的桥梁,JDBC作为一种数据库访问技术,具有简单易用、接口灵活的优点。JDBC只提供了最直接的数据库操作规范,对数据库资源管理,如:对物理连接的管理及缓冲,期望第三方应用服务器(Application Server)的提供。使用普通的JDBC开发模式技术进行Web应用程序开发会存在以下的问题:

1) 每次Web数据库服务请求都要重新建立一个新的数据库连接。这个操作过程对于一次或几次的Web服务请求来说也许感觉不到特别大的影响,可是对于企业级别的Web应用,同时有几百人甚至几千人在线进行服务请求是很普通的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,Web服务的响应速度和效率必定受到影响,严重的甚至会造成服务器的崩溃。

2) 对于每一个数据库连接,数据库服务请求完成后都需要进行连接关闭和释放。如果某个程序出现异常而未能进行正常关闭释放,将导致服务器中此连接占用的系统资源永远无法进行正常回收,从而存在很大的系统资源浪费,情况严重的导致系统资源耗尽从而无法对正常的服务请求提供应答,最终影响Web服务质量和效率。

3) 对于Web服务请求中的数据库连接和数据库操作控制和监控能力很弱,不能根据实际情况控制同时创建的数据库连接对象数、无法对数据库服务请求进行监控等。系统资源可能会被无限制的进行分配请求,从而影响对服务请求的应答时间和效率,严重的会导致服务器因无法承受过多的资源分配压力而崩溃,最终影响Web服务质量和效率。

2 数据库连接池(connection pool)的工作原理

由上面的问题分析可以看出,问题的根源在于对数据库连接资源的低效管理和放任政策导致数据库连接这个重要的资源完全暴露在应用系统管理之外。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。通过一次建立数据库连接后的共享使用实现数据库连接的高效运行,可以通过设定连接池最大连接数、最多并发连接数等来防止系统无限制的进行数据库连接和数据库服务请求。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量p使用情况,为系统开发p测试及性能调整提供依据。

3 连接池关键问题分析和解决方案

3.1 并发问题

为了使连接管理服务具有最大的通用性,适应Web服务的特性,必须考虑多线程环境,即并发问题,从而防止多个服务请求同时使用一个数据库连接。因为Java语言自身提供了对并发管理的支持,使用synchronized关键字即可确保线程是同步和不互相干扰的。使用方法为直接在类方法前面加上synchronized关键字即可。

3.2 多数据库连接

对于大型的企业级Web应用,常常需要同时多个连接不同的数据库(如连接Oracle和Sybase),一个服务请求可能涉及多个不同的数据库操作。数据库连接池可以采用的策略是:设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源配置文件,其中资源文件中存放着多个JDBC数据库驱动和连接配置信息。根据资源文件提供的信息,创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连接池。通过单一的连接池管理类方法进行连接池的访问和管理,从而满足各种数据库连接需求。

3.3 事务处理

事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做,从而保障数据库数据的一致性和完整性。

在JDBC语言中,Connection类本身提供了对事务的支持,可以通过设置Connection的AutoCommit属性为false,然后显式的调用commit或rollback方法来实现。但要高效的进行Connection复用,就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。

3.4 连接池的分配与释放

连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。

对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有通过容器的顺序存放实现进行分配,(实际是需要先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大物理连接数,如果没有达到,就新建一个连接,如果已经达到,则返回空值。连接释放时再放入空闲池中,系统对已经分配出去的连接和已经创建的物理连接进行计数,提供监控功能。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。

上一篇:数字化校园建设中ETL技术实现数据集成 下一篇:基于SOA架构建立气象科学数据共享系统方法研究