【Java】数据库连接池技术

JDBC的问题

在程序中,我们经常要建立与数据库的连接,之后再关闭这个连接。我们知道,数据库连接对象的创建是比较消耗系统性能的,这些频繁的操作势必会消耗大量的系统资源。因此我们需要采用更高效的数据库访问技术。

数据库连接池的概念

在JDBC2.0中提出了数据库连接池技术,它提供了javax.Sql.DataSource(数据源)接口,它负责建立与数据库的连接。通过客户之间共享一组连接,而不是在它们需要的时候为他们新建立连接,这样就可以改善资源的使用,提高应用程序的响应能力。

连接池技术的核心思想

连接池技术的核心思想是:连接复用。通过建立一个数据库连接池以及一套连接使用、分配、治理策略,是的该连接池的连接可以得到高效、安全的复用,避免了数据库连接的频繁建立、关闭的开销。

基于JDBC的数据库连接池技术

数据库连接池技术是基于JDBC技术的,对JDBC的原始连接进行了封装,从而提高了开发效率。

数据源的创建与JNDI资源

DataSource的创建

DataSource对象由Web容器提供,因此不能再程序中采用创建一个实例的方式来生成DataSource对象。

DataSource的获取

当启动Web容器之后,Web容器创建DataSource对象,之后就通过JNDI技术来获得DataSource对象。

DataSource创建、获取的基本流程

由于DataSource对象是有Web容器提供的,但Web程序不会平白无故的创建DataSource,必须通过一个"消息"通知Web容器要创建数据源对象。通常我们用的Web容器时Tomcat,在Tomcat中这个"消息"就是一个XML配置文件,通过context.xml文件配置数据源。

在Tomcat的安装路径下的conf 目录下有一个context.xml文件。当启动Tomcat后,Tomcat会加载一系列的配置文件,并且解析配置文件中的内容,当然也包括context.xml文件。当Tomcat检查到context.xml文件中有数据源对象的配置时,Tomcat就会跟数据源配置信息创建相应的数据库连接。在创建数据源的过程中,Tomcat会根据配置信息,比如说:数据源的名称、数据源的类型、数据源数据连接的最大数目、数据库连接的最大空闲时间等信息创建出相应的连接,形成数据库连接池。

之后在程序中通过JNDI技术,根据数据源的名称查找到相应的数据库连接池,获取连接,供程序使用。

JNDI的配置

Tomcat把DataSource作为一种可配置的JNDI资源来处理。其配置如下:

<Context>

……

<Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource" maxActive="1000" maxIdle="30" maxWait="10000" username="sa" password="sa"

driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

url="jdbc:sqlserver://localhost:1433; DatabaseName=books"

/>

</Context>

通过JNDI在程序中获取DataSource

在程序中,通过javax.naming.Context对象获得DataSource对象,如下:

Context cxt = new InitialContext();

当Web容器加载到该句代码时,当完成创建实例后,Context对象就获取了DataSource对象

之后通过Context对象的lookup方法查找出数据源,该方法的参数是以"java:comp/env"为前缀,以配置文件中的数据源的名称结尾的字符串。如下:

DataSource ds = (DataSource)cxt.lookup("java:comp/env/jdbc/books");

取得一个数据源之后,将其转换为DataSource对象。

获得DataSource之后,便通过DataSource对象取得Connection,如下:

Connection conn = ds.getConnection();

有了Connection对象之后就可以对数据进行其他操作了。

http://blog.163.com/[email protected]/blog/static/22928525201021661922648/

时间: 2024-10-27 11:13:42

【Java】数据库连接池技术的相关文章

java数据库连接池技术简单使用

JDBCDemo.java: package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.itheima.pool.MyPool; public class JDBCDemo { public static void main(String[]

Java数据库连接池详解

http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决我们的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去

java数据库连接池dbcp的使用

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

java数据库连接池实现原理

一.为什么在连接数据库时要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.  一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下. 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个"池"里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请.使用和释放.对于多于连接池中连接数的并发请求,应该在请求队列

Java数据库连接池

写了个 Java数据库连接池,具备基本的功能点: 1.对池中活动连接的重用. 2.池满时的适时等待. 3.对空闲连接的适时关闭. 抛砖引玉,不吝赐教. 源码文件 DBConnection.java 1 package db; 2 3 import java.sql.Connection; 4 import java.util.concurrent.atomic.AtomicBoolean; 5 6 /** 7 * 封装的连接 8 * @author Linkwork, [email protec

java 数据库连接池 Oracle版

首先应加入连接池和数据库连接的配置文件:数据库连接包:ojdbc6.jar数据库连接池包:commons-pool2-2.2.jar                       commons-dbcp2-2.0.jar数据库连接配置文件:config.properties使用连接池连接一定不要忘记关闭否则会很倒霉DBHelper 的写法 import java.io.IOException;import java.io.InputStream;import java.sql.Connectio

java数据库连接池性能对比

这个测试的目的是验证当前常用数据库连接池的性能. testcase Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.preparedStatement("select 1"); ResultSet rs = stmt.executeQuery(); while (rs.next()) { } rs.close(); stmt.close(); conn.close(); test c

数据库连接池技术

mysql是线程模式,可以支持更多的并发连接数,mysql能支持远比oracle更多的连接,所以oracle应用中通常用数据库连接池技术来复用连接,那么mysql为什么要用常见的数据库连接池技术呢? 原因在于mysql的锁机制还不够完善,同时程序中的一些问题都有可能导致mysql数据库的连接阻塞,在并发大的情况下,就会浪费很多连接资源和反复连接的消耗. 使用数据库连接池,让连接进行排队和复用,一定程度上可以缓解高并发下的连接压力. mysql瓶颈是真是存在的,很多互联网大公司仍然使用mysql,

一个效果非常不错的JAVA数据库连接池

package studytest; ////    一个效果非常不错的JAVA数据库连接池.//    from:http://www.jxer.com/home/?uid-195-action-viewspace-itemid-332//    虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,//    但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整,//    真是非常难得,让开发人员可以更深层次的理解数据库连接池,真是非常感//    谢