Java使用独立数据库连接池(DBCP为例)

目前,绝大多数的软件系统都会使用数据库,而在软件构建起来之后,访问数据库又成为软件系统性能的短板(I/O操作)。一般来说一次访问数据库就需要一个数据库连接。而每次创建数据库连接都需要访问,分配空闲资源,占用资源,释放资源,结束访问。非常的耗费时间和空间。

于是数据连接池技术便产生了,其原理就是在数据请求方和数据库之间建立一个数据库连接管理层。在系统启动的时候就分配一定数量的连接,并维护这些连接,保持最低数量的连接数。同时为了保护数据库和系统,设置一个最大连接数,缓解数据库的访问压力。

这样在每次数据请求方需要连接时,管理器便分配一个连接给数据请求方,数据请求方使用完连接后,将连接归还给管理器,这样就尽可能的减少不必要的数据库连接消耗。

在Java的数据库服务JDBC中并没有提供一个实际ConnectionPool实现,但是留出了接口以支持第三方服务提供商,我觉得其中最重要的接口是DataSource。

实际上Java访问数据库的方式主要有四种: 
一、使用DriverMananger来直接编程实现,这种是最基本的方式。 
DriverMananger实现数据库连接的关键步骤为: 
1>Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance(); 
2>Connection conn = null; 
3>conn = DriverManager.getConnection(url, "name", "password");

二、使用服务器配置文件来实现连接池。 
一些服务器提供了自己的数据库连接池服务,例如Tomcat服务器就提供了由commons-DBCP支持的数据池连接服务,只需要在context.xml中填写相应的数值就可以了。

三、配置文件配置 datasource 
DataSource是在JavaAPI中提供的一个接口,第三方服务在实现了DataSource之后,例如DBCP的BasicDataSource,为了提高数据库连接池的可配置性,便利用IOC模式(控制反转),将实际的Bean与配置数据分开,配置数据放在配置文件中(一般使用XML)。来实现对多个数据库的控制。

而在DataSource对象实例化之后,通过DataSource.getConnection()就可以得到连接了。

四、通过配置jdbc-odbc连接桥 
听说过,没有使用过,没有发言权。

在这里使用Apache提供的commons-DBCP来实现一个独立的简单的数据库连接池。

首先需要三个工具包:commons-pool.jar,commons-collection.jar,commons-DBCP.jar。

关键实现代码段见下:

Java代码  

  1. //持有一个静态的数据库连接池对象
  2. private static DataSource DS;
  3. //使用DBCP提供的BasicDataSource实现DataSource接口
  4. public static void initDataSource(String connectURI, String username,
  5. String password, String driverClass, int initialSize,
  6. int maxActive, int maxIdle, int maxWait) {
  7. BasicDataSource ds = new BasicDataSource();
  8. ds.setDriverClassName(driverClass);
  9. ds.setUsername(username);
  10. ds.setPassword(password);
  11. ds.setUrl(connectURI);
  12. ds.setInitialSize(initialSize);
  13. ds.setMaxActive(maxActive);
  14. ds.setMaxIdle(maxIdle);
  15. ds.setMaxWait(maxWait);
  16. DS = ds;
  17. }
  18. //获得一个数据库连接
  19. public Connection getConnection() {
  20. Connection con = null;
  21. if (DS != null) {
  22. try {
  23. con = DS.getConnection();
  24. } catch (Exception e) {
  25. System.out.println(e.getMessage());         }
  26. //将数据库连接的事物设置为不默认为自动Commit
  27. try {
  28. con.setAutoCommit(false);
  29. } catch (SQLException e) {
  30. System.out.println(e.getMessage());         }
  31. return con;
  32. }
  33. //回收数据库连接时,直接使用con.close()即可
  34. return con;
  35. }
  36. //回收数据库连接
  37. protected static void shutdownDataSource() throws SQLException {
  38. BasicDataSource bds = (BasicDataSource) DS;
  39. bds.close();
  40. }

上面的代码都是从实际使用的代码抽取出来的,希望可以帮助大家。

目前,OpenSource中提供了很多的数据库连接池技术,使用的流程和模式,都与上面的代码大同小异。同时最新发布的BoneCP我还从来没有感受过,希望有朋友与我分享一下使用经验。

时间: 2024-10-07 08:25:40

Java使用独立数据库连接池(DBCP为例)的相关文章

[数据库连接池] Java数据库连接池--DBCP浅析.

前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正式针对这个问题提

java数据库连接池dbcp的使用

近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式逐渐取代C/S(Client/Server)架构的开发模式,成为开发企业级应用和电子商务普遍采用的技术. 在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁, 即Java语言通过JDBC技术访问数据库.JDBC是一种"开放"的方案,它

java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

mysql笔记八——开源数据库连接池DBCP和C3P0的使用

DBCP数据库连接池 DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 Tomcat 的连接池正是采用该连接池来实现的.该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用. 核心代码 static{ InputStream in = JdbcUtil.class.getClassLoader(). get

开源框架数据库连接池dbcp的使用方法

package com.mysql.demo; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; //运用开源数据库连接池DBCP //引用dbcp.j

常用数据库连接池 (DBCP、c3p0、Druid) 配置说明(转)

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

记性不如烂笔头21-JAVA数据库连接池 DBCP

用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天100万访问量,数据库服务器就需要创建100万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器连接数溢出,并且用户的使用也会很慢,影响用户体验: 对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标. 数据库连接池针对这些问题创建出来.数据库连接池负责分配,管理和释放数据库资源,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个. 数据库连接

java Datasource,数据库连接池

目前有多重方式创建数据库连接池:JNDI,DBCP,C3P0等 为什么需要连接池: 使用java API DriverManager.getConnection()创建数据库连接,耗费内存和时间,实时性低:这种方式获取的connection需要手动关闭,不然会耗费大量的内存资源:对于频繁数据库操作,这种方式会造成性能低,尤其web应用 数据库连接池的功能: 负责创建.管理和分配数据库连接.初始化数据库连接池时,会创建一定数量的数据库连接对象,并存放于数据库连接池中.当请求连接数据库时,连接池会分