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开发—连接池(一)相关推荐

  1. 2011级-csdn-java-张侃— JDBC开发—连接池(二)

    l 配置Tomcat数据源 示例代码: context.xml <Context> <Resource name="jdbc/testDB" auth=" ...

  2. java连接池域名切换_java - 使用JDBC的连接池选项:DBCP与C3P0

    java - 使用JDBC的连接池选项:DBCP与C3P0 什么是可用于Java / JDBC的最佳连接池库? 我正在考虑2个主要候选人(免费/开源): Apache DBCP - [http://c ...

  3. JDBC数据源连接池(1)---DBCP

    何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...

  4. JDBC通过连接池链接数据库总是失败的解决办法

    应用服务器:glassfish JDBC通过连接池链接数据库总是失败,通过查看日志,发现是APACHE报DHCP 错误, 只需要通过访问4848端口的管理程序,重新PING下JDBC当前连接池即可.

  5. 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发

    项目下载:超市管理系统JavaSwing+MySQLJDBC开发_javamysql超市管理系统-互联网文档类资源-CSDN下载 1.9元付费赞助下载:超市管理系统JavaSwing+MySQLJDB ...

  6. 「会员卡管理系统」 · Java Swing + MySQL JDBC开发

    目录 目录 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 >>>实现代码: 数据库 com.ynavc.Bean com.yn ...

  7. 「物流跟踪管理系统」 · Java Swing + MySQL JDBC开发,美和易思结业考试机试试题

    目录 文档说明: 一.语言和环境 二.技术要求 三.功能要求 四.数据库设计 五.具体要求及推荐实现步骤 六.注意事项 实现代码: 一.数据库 二.Java Swing com.ynavc.Bean ...

  8. 大数据笔记16—java基础篇12(JDBC 、连接池、事务)

    目录 JDBC jdbc概述 jdbc入门案例 API详解 jdbc工具类 预编译执行平台 1.SQL注入问题(安全问题) 2API详解:预处理对象(PreparedStatement) 使用连接池重 ...

  9. Java 原始的JDBC方式连接MySQL数据库【钢镚核恒】

    Java JDBC 简介 JDBC(Java DataBase Connectivity,Java数据库连接) JDBC 可让Java通过程序操作关系型数据库 JDBC 基于驱动程序实现与数据库的连接 ...

最新文章

  1. TensorRT-安装-使用
  2. ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客
  3. DymSLAM: 基于几何和运动分割的4D动态场景重建( RAL)
  4. Nat. Commun.|概率蛋白质序列模型的生成能力
  5. 实战例子_Pytorch官方力荐新书《Pytorch深度学习实战指南》pdf及代码分享
  6. python动态获取cookie_scrapy爬虫使用Ghost.py动态获取cookie
  7. 磁盘分区和目录的区别是什么
  8. 超详细的VSCode下载和安装教程以及解决VSCode下载速度特别慢的问题
  9. 怎么用odbc连接mysql数据库连接_怎么用odbc连接mysql数据库
  10. python电子表格类_python合并同类型excel表格的方法
  11. Java基础知识与集合部分面试题整理
  12. CCIE第一天---QoS
  13. UE4打包项目部署到Quest遇到的问题
  14. 短信业务管理-移动短信接入
  15. 第四次作业-微软必应词典客户端
  16. Ubuntu下SVN工具推荐
  17. 怎么在 Windows 下生成 文档树 tree?
  18. JSP基础语法-动作(Action)
  19. kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手常见入门问题解决方案教程
  20. chrome主页被篡改毒霸网址大全

热门文章

  1. IntelliJ IDEA 快捷键大全 Win 版
  2. 深度学习tensorflow object detect 之识别社会人小猪佩奇
  3. codeforces 839A
  4. Android NDK开发之C语言基础及指针①
  5. 有个运营妹纸心算找不到数独答案,心一横干脆写代码实现
  6. web界面——html基础
  7. odoo13 订单模板设置_Odoo12: 自定义配置面板
  8. 硬核!拼多多三面惨败,附赠课程+题库
  9. Linux服务器硬件与RAID配置
  10. 社群运营,大家都在使用哪些运营工具?