2011级-csdn-java-张侃— JDBC开发—连接池(一)
l 应用程序直接获取链接的缺点
l 缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、宕机。
使用数据库连接池优化程序性能
编写数据库连接池
l 编写连接池需实现javax.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:
• Connection getConnection()
• Connection getConnection(String username,String password)
l 实现DataSource接口,并实现连接池功能的步骤:
• 在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。
• 实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。
• 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。
• Collection保证将自己返回到LinkedList中是此处编程的难点。
数据库连接池核心代码
l 使用动态代理技术构建连接池中的connection
proxyConn = (Connection) Proxy.newProxyInstance(this.getClass()
.getClassLoader(),conn.getClass().getInterfaces(),
new InvocationHandler() {
//此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行
public Object invoke(Object proxy, Method method,
Object[]args) throws Throwable {
if (method.getName().equals("close")) {
pool.addLast(conn);
returnnull;
}
return method.invoke(conn, args);
}
});
动态代理
l Java提供了一个Proxy类,调用它的newInstance方法可以生成某个对象的代理对象,使用该方法生成代理对象时,需要三个参数:
• 1.生成代理对象使用哪个类装载器
• 2.生成哪个对象的代理对象,通过接口指定
• 3.生成的代理对象的方法里干什么事,由开发人员编写handler接口的实现来指定。
l 初学者必须理解,或不理解必须记住的2件事情:
• Proxy类负责创建代理对象时,如果指定了handler(处理器),那么不管用户调用代理对象的什么方法,该方法都是调用处理器的invoke方法。
• 由于invoke方法被调用需要三个参数:代理对象、方法、方法的参数,因此不管代理对象哪个方法调用处理器的invoke方法,都必须把自己所在的对象、自己(调用invoke方法的方法)、方法的参数传递进来。
开源数据库连接池
l 现在很多WEB服务器(Weblogic,WebSphere, Tomcat)都提供了DataSource的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
l 也有一些开源组织提供了数据源的独立实现:
• DBCP 数据库连接池
• C3P0 数据库连接池
l 实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。
DBCP数据源
l DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:
• Commons-dbcp.jar:连接池的实现
• Commons-pool.jar:连接池实现的依赖库
l Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
l 使用DBCP示例代码:
static{
InputStreamin = JdbcUtil.class.getClassLoader().
getResourceAsStream("dbcpconfig.properties");
Propertiesprop = new Properties();
prop.load(in);
BasicDataSourceFactoryfactory = new BasicDataSourceFactory();
dataSource = factory.createDataSource(prop);
}
l C3P0 数据源
2011级-csdn-java-张侃— JDBC开发—连接池(一)相关推荐
- 2011级-csdn-java-张侃— JDBC开发—连接池(二)
l 配置Tomcat数据源 示例代码: context.xml <Context> <Resource name="jdbc/testDB" auth=" ...
- java连接池域名切换_java - 使用JDBC的连接池选项:DBCP与C3P0
java - 使用JDBC的连接池选项:DBCP与C3P0 什么是可用于Java / JDBC的最佳连接池库? 我正在考虑2个主要候选人(免费/开源): Apache DBCP - [http://c ...
- JDBC数据源连接池(1)---DBCP
何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...
- JDBC通过连接池链接数据库总是失败的解决办法
应用服务器:glassfish JDBC通过连接池链接数据库总是失败,通过查看日志,发现是APACHE报DHCP 错误, 只需要通过访问4848端口的管理程序,重新PING下JDBC当前连接池即可.
- 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发
项目下载:超市管理系统JavaSwing+MySQLJDBC开发_javamysql超市管理系统-互联网文档类资源-CSDN下载 1.9元付费赞助下载:超市管理系统JavaSwing+MySQLJDB ...
- 「会员卡管理系统」 · Java Swing + MySQL JDBC开发
目录 目录 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 >>>实现代码: 数据库 com.ynavc.Bean com.yn ...
- 「物流跟踪管理系统」 · Java Swing + MySQL JDBC开发,美和易思结业考试机试试题
目录 文档说明: 一.语言和环境 二.技术要求 三.功能要求 四.数据库设计 五.具体要求及推荐实现步骤 六.注意事项 实现代码: 一.数据库 二.Java Swing com.ynavc.Bean ...
- 大数据笔记16—java基础篇12(JDBC 、连接池、事务)
目录 JDBC jdbc概述 jdbc入门案例 API详解 jdbc工具类 预编译执行平台 1.SQL注入问题(安全问题) 2API详解:预处理对象(PreparedStatement) 使用连接池重 ...
- Java 原始的JDBC方式连接MySQL数据库【钢镚核恒】
Java JDBC 简介 JDBC(Java DataBase Connectivity,Java数据库连接) JDBC 可让Java通过程序操作关系型数据库 JDBC 基于驱动程序实现与数据库的连接 ...
最新文章
- TensorRT-安装-使用
- ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客
- DymSLAM: 基于几何和运动分割的4D动态场景重建( RAL)
- Nat. Commun.|概率蛋白质序列模型的生成能力
- 实战例子_Pytorch官方力荐新书《Pytorch深度学习实战指南》pdf及代码分享
- python动态获取cookie_scrapy爬虫使用Ghost.py动态获取cookie
- 磁盘分区和目录的区别是什么
- 超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题
- 怎么用odbc连接mysql数据库连接_怎么用odbc连接mysql数据库
- python电子表格类_python合并同类型excel表格的方法
- Java基础知识与集合部分面试题整理
- CCIE第一天---QoS
- UE4打包项目部署到Quest遇到的问题
- 短信业务管理-移动短信接入
- 第四次作业-微软必应词典客户端
- Ubuntu下SVN工具推荐
- 怎么在 Windows 下生成 文档树 tree?
- JSP基础语法-动作(Action)
- kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手常见入门问题解决方案教程
- chrome主页被篡改毒霸网址大全