《数据库连接池幻灯片.ppt》由会员分享,可在线阅读,更多相关《数据库连接池幻灯片.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库连接池第1页,共26页,编辑于2022年,星期六学习内容:o为什么使用连接池o可以使用哪些连接池o如何在程序中使用连接池o常见连接池使用举例第2页,共26页,编辑于2022年,星期六一、为什么使用连接池o为什么要使用连接池 任何应用程序都必须先拥有一个活动的数据库连接,然后才能访问数据库。数据库连接是一个很占资源且 I/O 开销很大的操作,并且如果每次想使用数据库连接时都必须创建它,那么它将会成为程序性能的瓶颈。第3页,共26页,编辑于2022年,星期六一、为什么使用连接池 例如在JavaBean中操作数据库,一般的思路是把Connection对象作为Bean的一个属性,然后在构造函数中
2、创建并初始化该对象,创建的方法是使用DriverManager.getConnection()。使用完成后调用close()方法进行关闭。第4页,共26页,编辑于2022年,星期六一、为什么使用连接池 前述的JavaBean一般会在应用程序中多次使用。这样就会带来一个不好的结果:每次调用Bean对象,都会通过构造函数创建其Connection对象。JDBC创建与销毁连接对象是一个资源开销极大的操作,尤其在大量用户并发访问应用程序时,这个现象会更加明显。第5页,共26页,编辑于2022年,星期六一、为什么使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户并发的应用程序中体现得尤为
3、突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。第6页,共26页,编辑于2022年,星期六一、为什么使用连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这样一来可以大大减小应用程序中频繁创建和销毁连接对象的操作次数,降低服务器端的开销。这项技术能明显提高对数据库操作的性能。第7页,共26页,编辑于2022年,星期六一、为什么使用连接池 数据库连接池在初始化时
4、将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。第8页,共26页,编辑于2022年,星期六二、可以使用哪些连接池 1、可以自己写一个连接池类,然后使用它。当然写一个性能稳定的连接池类是较为复杂的一件事情。2、使用J2EE服务器自带连接池,如Tomcat自带的连接池。3、可以使用开源连接池。第9页,共26页,编辑于2022年,星期六二、可以使
5、用哪些连接池o开源连接池 1、C3P0:C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。第10页,共26页,编辑于2022年,星期六二、可以使用哪些连接池2、Proxool:这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。第11页,共26页,编辑于2022年,星期六二、可
6、以使用哪些连接池3、Jakarta DBCP:DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,DBCP可以直接的在应用程序用使用。第12页,共26页,编辑于2022年,星期六二、可以使用哪些连接池4、BoneCP:BoneCP是一个快速,开源的数据库连接池。帮你管理数据连接让你的应用程序能更快速地访问数据库。比C3P0/DBCP连接池快25倍。第13页,共26页,编辑于2022年,星期六二、可以使用哪些连接池5、其它开源连接池:DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnection
7、PoolManager等。第14页,共26页,编辑于2022年,星期六三、如何在程序中使用连接池 在Java程序中,可以引入连接池需要的jar包,然后使用连接池中的相关类进行配置,最后得到连接对象。见文档2.doc。第15页,共26页,编辑于2022年,星期六三、如何在程序中使用连接池 但是这种操作是利用BoneCP提供的连接池相关类进行的,而不是直接使用JDBC来管理连接的,因此在得到连接对象之前,使用者只能使用BoneCP提供的API,而不是统一的JDBC API。适合在非J2EE环境下使用。第16页,共26页,编辑于2022年,星期六三、如何在程序中使用连接池 在JDBC2.0中,引入了
8、数据源(DataSource)的概念。目前在J2EE应用中,通过DataSource获取数据库连接是首选方式,因为这样一来,使用者使用的是统一的JDBC API。第17页,共26页,编辑于2022年,星期六三、如何在程序中使用连接池 通常DataSource对象是从连接池提供连接,一般对于不同的J2EE服务器,或不同的数据源类型,虽然数据源的配置内容不尽相同,但是只要配置完成后,程序中使用DataSource提供的API就可以得到连接池中的连接,非常方便。第18页,共26页,编辑于2022年,星期六三、如何在程序中使用连接池o使用DataSource的优势 使用DataSource接口会使得程
9、序变得很灵活,移植性很强。从后面的介绍将看到,DataSource的设置和使用DataSource获得连接两种操作是分离的,因此不需要修改程序就可以改变客户端对不同数据源(如数据库)的访问。DataSource隐藏了从连接池获得连接的细节,程序员不需要关心其内部操作,甚至不用关心连接参数。第19页,共26页,编辑于2022年,星期六三、如何在程序中使用连接池 一般通过在环境(context)中进行查找来获取一个DataSource。简单的说,context是一种把名称和资源相关联的手段。程序员一般先创建一个DataSource对象(null),然后把这个实例和某一个环境绑定到一起。绑定(bin
10、ding)是指将资源和名称进行关联的行为。例如文件内容和文件名的绑定。这样就可以在程序中通过相应的名称获得一个DataSource的引用了。第20页,共26页,编辑于2022年,星期六四、常见连接池使用举例1 1、使用、使用Tomcat 6.0Tomcat 6.0的连接池的连接池 前提:已经将数据库提供的JDBC驱动程序拷贝到正确位置。(Tomcat的lib中和工程目录的lib中)(1)设置context.xml文件,添加数据源的配置信息。见具体的文件设置。第21页,共26页,编辑于2022年,星期六四、常见连接池使用举例o maxIdle,连接池中连接的最大空闲数。数据库连接有最大空闲时间,
11、超过空闲时间,数据库连接将被标记为不可用,然后被释放。设置最大空闲数的目的是在没有任何数据库连接时也保持若干数量的空闲连接数。设为0表示无限制。默认为5,表示表示即使没有数据库连接时依然可以保持5空闲的连接,而不被清除,随时处于待命状态。第22页,共26页,编辑于2022年,星期六四、常见连接池使用举例o maxActive,连接池的最大数据库激活连接数。设为0表示无限制。缺省为50,表示同时最多有20个数据库连接。o maxWait,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。缺省为5000,表示5秒后超时。第23页,共26页,编辑于2022年,星期六四、常见连接池使
12、用举例 (2)在程序中使用设置好的DataSource。见WebMVCPrj工程。第24页,共26页,编辑于2022年,星期六四、常见连接池使用举例2、使用开源连接池BoneCP(1)环境o 环境:jdk1.6,tomcat6.0.20,bonecp-0.6.4o 需要的包:google-collections-1.0.jar,slf4j-api-1.5.11.jar,slf4j-log4j12-1.5.11.jar,bonecp-0.6.4.jar第25页,共26页,编辑于2022年,星期六四、常见连接池使用举例(2)数据源配置(通过DataSource获取连接)见context.xml。(3)程序中使用BoneCP 可以直接通过BoneCP的类库在程序中创建连接池,然后获得连接;也可以通过DataSource获得连接。见工程boneCPprj。第26页,共26页,编辑于2022年,星期六