`
mywebcode
  • 浏览: 998008 次
文章分类
社区版块
存档分类
最新评论

11级_Java_曹建波 11.26 JDBC连接池

 
阅读更多

使用数据库连接池优化程序性能

编写数据库连接池

编写连接池需实现javax.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:

Connection getConnection()

Connection getConnection(Stringusername,Stringpassword)

实现DataSource接口,并实现连接池功能的步骤:

在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。

实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。

当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。

Collection保证将自己返回到LinkedList中是此处编程的难点。

数据库连接池核心代码

使用动态代理技术构建连接池中的connection

proxyConn = (Connection) Proxy.newProxyInstance(this.getClass()

.getClassLoader(),conn.getClass().getInterfaces(),

newInvocationHandler() {

//此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行

publicObject invoke(Object proxy, Method method,

Object[]args) throws Throwable {

if(method.getName().equals("close")) {

pool.addLast(conn);

returnnull;

}

returnmethod.invoke(conn, args);

}

});

动态代理

Java提供了一个Proxy类,调用它的newInstance方法可以生成某个对象的代理对象,使用该方法生成代理对象时,需要三个参数:

1.生成代理对象使用哪个类装载器

2.生成哪个对象的代理对象,通过接口指定

3.生成的代理对象的方法里干什么事,由开发人员编写handler接口的实现来指定。

初学者必须理解,或不理解必须记住的2件事情:

Proxy类负责创建代理对象时,如果指定了handler(处理器),那么不管用户调用代理对象的什么方法,该方法都是调用处理器的invoke方法。

由于invoke方法被调用需要三个参数:代理对象、方法、方法的参数,因此不管代理对象哪个方法调用处理器的invoke方法,都必须把自己所在的对象、自己(调用invoke方法的方法)、方法的参数传递进来。

开源数据库连接池

现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSource的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。

也有一些开源组织提供了数据源的独立实现:

DBCP 数据库连接池

C3P0 数据库连接池

实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。

DBCP数据源

DBCP 是Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:

Commons-dbcp.jar:连接池的实现

Commons-pool.jar:连接池实现的依赖库

Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

使用DBCP示例代码:

static{

InputStreamin = JdbcUtil.class.getClassLoader().

getResourceAsStream("dbcpconfig.properties");

Propertiesprop = new Properties();

prop.load(in);

BasicDataSourceFactoryfactory = new BasicDataSourceFactory();

dataSource= factory.createDataSource(prop);

}

C3P0 数据源

ds = new ComboPooledDataSource();

ds.setDriverClass("com.mysql.jdbc.Driver");

ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");

ds.setUser("root");

ds.setPassword("root");

ds.setInitialPoolSize(10);

ds.setMaxPoolSize(40);

ds.setMinPoolSize(5);

Connection ds = ds.getConnection();

C3p0-config.xml

<c3p0-config>

<default-config>

<propertyname="driverClass">com.mysql.jdbc.Driver</property>

<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/test</property>

<propertyname="user">root</property>

<propertyname="password">root</property>

<propertyname="acquireIncrement">5</property>

<propertyname="initialPoolSize">10</property>

<propertyname="minPoolSize">5</property>

<propertyname="maxPoolSize">20</property>

</default-config>

<named-configname="mysql">

<propertyname="driverClass">com.mysql.jdbc.Driver</property>

<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/test</property>

<propertyname="user">root</property>

<propertyname="password">root</property>

<propertyname="acquireIncrement">5</property>

<propertyname="initialPoolSize">10</property>

<propertyname="minPoolSize">5</property>

<propertyname="maxPoolSize">20</property>

</named-config>

</c3p0-config>

分享到:
评论

相关推荐

    jedis示例代码压缩包

    jedis示例代码

    高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料

    【资源说明】 高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料 可实现数据库的可视化操作:增、删、改、查.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    中文文本分类 传统机器学习+深度学习.zip

    中文文本分类 传统机器学习+深度学习

    Linux学习笔记4-点亮LED灯(汇编裸机)程序

    Linux学习笔记4---点亮LED灯(汇编裸机)程序

    英特尔杯软创大赛RCDancer项目组工程文件夹.zip

    英特尔杯软创大赛RCDancer项目组工程文件夹

    0011后台管理模板AdobeXD源码下载设计素材UI设计.xd

    0011后台管理模板AdobeXD源码下载设计素材UI设计

    高分毕业设计 基于Spark2.x新闻网大数据实时分析可视化系统项目源码+部署文档+全部数据资料.zip

    【资源说明】 高分毕业设计 基于Spark2.x新闻网大数据实时分析可视化系统项目源码+部署文档+全部数据资料.zip高分毕业设计 基于Spark2.x新闻网大数据实时分析可视化系统项目源码+部署文档+全部数据资料.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    Netty实现大文件分块传输详解.pdf

    java Netty实现大文件分块传输详解

    Hotel_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计.xd

    Hotel_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计

    公司年会各种总结发言稿样稿范文word版本资料

    +公司年会总结发言 年会总结 年总结发言 年终总结发言稿 总结发言 龙总结发言 公司年会总结发言 +年会发言稿样稿 年会发言稿样稿01.doc 年会发言稿样稿02 年会发言稿样稿03 年会发言稿样稿04 \年会各种发言稿范文 主持人台词、主持人开场白、主持人串词大全 企业年会领导致辞范文(很经典) 优秀员工代表公司年会发言稿(幽默) 供应商代表年会发言稿 公司年会主持串词 公司年会主持人串词 公司年会主持台词 公司年会主持稿大全 公司年会主持词开始及结束语 公司年会总经理致词范文 公司年会领导讲话稿 员工代表年会发言稿 年会串词(最终版) 年会主持词 年会优秀发言稿结尾 年会游戏主持稿 年会董事长或总经理发言稿 总经理年会发言稿范文 新员工代表公司年会发言稿(范文) 最新公司年会发言稿 科技公司年会主持词串词 经销商年会公司领导发言稿(范文) 董事长年会致辞(简短有力)

    导航主页模板 html模板.zip

    导航主页模板 html模板

    理财管理(Spring boot+thymeleaf)

    该毕业设计使用了当前较为流行的spring boot,spring,spring mvc,mybatis,shiro框架分页处理使用了pagehelper进行操作 前台使用了模板语言thymeleaf,界面较为炫酷,适合年轻朋友。 开发工具采用的是IDEA。 该系统主要解决了理财中的一些问题,包含功能: 1. 权限管理 2.用户信息管理 3.理财产品管理等内容。

    SQL详细介绍资料.zip

    sql,SQL(Structured Query Language,结构化查询语言)是一种标准化的语言,用于在关系数据库管理系统(RDBMS)中存取和操作数据。SQL 使得用户能够访问和操作数据库中的数据,包括数据的查询、插入、更新和删除,以及数据库结构的创建和修改。

    基于海思3519DV500的网页无插件视频播放方案

    基于海思3519DV500的网页无插件视频播放方案

    windows-win32-direct3d12.pdf

    This programming guide contains information about how to use the Direct3D 12 programmable pipeline to create a customized graphics engine. The Direct3D 12 headers and libraries are part of the Windows 10 SDK. There is no separate download or installation required to use Direct3D 12

    网络安全课本资源.zip

    网络安全课本资源.zip

    stm32zet6使用TFTLCD事项亮屏

    stm32zet6使用TFTLCD事项亮屏

    [精品] todo_appAdobeXD源码下载设计素材UI设计.xd

    [精品] todo_appAdobeXD源码下载设计素材UI设计

    Company_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计.xd

    Company_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计

    HTML27-创意官网模板官网落地页APP主页产品宣传页源码 landing静态页面.zip

    HTML27-创意官网模板官网落地页APP主页产品宣传页源码 landing静态页面

Global site tag (gtag.js) - Google Analytics