热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

连接池c3p0,Proxool,Druid,TomcatJdbcPool对比测试

这次所要做的测试是比较几种我们常用的数据库连接池的性能,他们分别是:c3p0,Proxool,Druid,TomcatJdbcPool这四种,测试将采用统一的参数配置力求比较“公平”的体现统

这次所要做的测试是比较几种我们常用的数据库连接池的性能,他们分别是:c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool这四种,测试将采用统一的参数配置力求比较“公平”的体现统一水平下几种连接池的不同,有网友回复说测试不公平会互相干扰,那我就把代码分开,代码是死的人是活的,做事情不动脑只能吃别人剩下的,世界上没有绝对公平的事情,我在此只提供了一个思路,更多的测试还需要你自己去完成。

 

        1.创建类TestDAO,封装统一的查询方法 :

Java代码  收藏代码
  1. import java.sql.Connection;  
  2. import java.sql.ResultSet;  
  3. import java.sql.SQLException;  
  4. import java.sql.Statement;  
  5.   
  6. public class TestDAO {  
  7.   
  8.     private final static String sql = "SELECT * FROM USER u WHERE u.USR_ID=9999";  
  9.   
  10.     public void query(Connection conn) {  
  11.         try {  
  12.             Statement st = conn.createStatement();  
  13.             ResultSet result = st.executeQuery(sql);  
  14.             result.close();  
  15.             st.close();  
  16.             conn.close();  
  17.         } catch (SQLException e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.     }  
  21. }  

 

 

        2.创建测试类TestMain,其中包含:统一参数配置属性、获取各种连接池数据源方法、各种数据源调用方法等,下面分别是各种数据源的测试Main方法,开始测试之前做100次查询操作以初始化连接池并起到稳定测试结果作用:

 

        (1)c3p0测试代码:

Java代码  收藏代码
  1. import java.beans.PropertyVetoException;  
  2. import java.io.IOException;  
  3. import java.sql.SQLException;  
  4. import com.mchange.v2.c3p0.ComboPooledDataSource;  
  5.   
  6. public class C3p0Test {  
  7.   
  8.     // 数据库驱动名称  
  9.     final static String driver = "com.mysql.jdbc.Driver";  
  10.     // 数据库连接地址  
  11.     final static String jdbcUrl = "jdbc:mysql://192.168.0.1:3306/test";  
  12.     // 数据库用户名  
  13.     final static String user = "dba";  
  14.     // 数据库密码  
  15.     final static String passwd = "dba";  
  16.     // 连接池初始化大小  
  17.     final static int initialSize = 5;  
  18.     // 连接池最小空闲  
  19.     final static int minPoolSize = 10;  
  20.     // 连接池最大连接数量  
  21.     final static int maxPoolSize = 50;  
  22.     // 最小逐出时间,100秒  
  23.     final static int maxIdleTime = 100000;  
  24.     // 连接失败重试次数  
  25.     final static int retryAttempts = 10;  
  26.     // 当连接池连接耗尽时获取连接数  
  27.     final static int acquireIncrement = 5;  
  28.     // c3p0数据源  
  29.     final static ComboPooledDataSource c3p0DataSource = getC3p0DataSource();  
  30.   
  31.     // 查询次数  
  32.     final static int count = 10;  
  33.   
  34.     /** 
  35.      * 测试方式: 每种数据源配置信息尽量相同,以求结果更加准确 
  36.      * 每种数据源做10次、100次、500次、1000次、2000次、4000次、8000次查询操作 每种查询重复100次,查看100次执行时间的波动图 
  37.      * @param args 
  38.      * @throws IOException 
  39.      * @throws SQLException 
  40.      */  
  41.     public static void main(String[] args) throws IOException, SQLException {  
  42.   
  43.         TestDAO testDAO = new TestDAO();  
  44.         System.out.println("查询次数为:" + count);  
  45.         System.out.println();  
  46.         System.out.println("==========================c3p0 测试开始==========================");  
  47.         // 测试c3p0  
  48.         for (int i = 0; i < 100; i++) {  
  49.             queryC3p0(testDAO, c3p0DataSource, count);  
  50.         }  
  51.         System.out.println("==========================c3p0 测试结束==========================");  
  52.     }  
  53.   
  54.     /** 
  55.      * c3p0测试 
  56.      * @param testDAO 
  57.      * @param ds 
  58.      * @param count 
  59.      * @throws SQLException 
  60.      */  
  61.     public static void queryC3p0(TestDAO testDAO, ComboPooledDataSource ds, int count) throws SQLException {  
  62.         // 查询100次以初始化连接池  
  63.         for (int i = 0; i < 100; i++) {  
  64.             testDAO.query(ds.getConnection());  
  65.         }  
  66.         // 开始时间  
  67.         long startMillis = System.currentTimeMillis();  
  68.         // 循环查询  
  69.         for (int i = 0; i < count; i++) {  
  70.             testDAO.query(ds.getConnection());  
  71.         }  
  72.         // 结束时间  
  73.         long endMillis = System.currentTimeMillis();  
  74.         // 输出结束时间  
  75.         System.out.println(endMillis - startMillis);  
  76.     }  
  77.   
  78.     /** 
  79.      * 获取c3p0数据源 
  80.      * @throws PropertyVetoException 
  81.      */  
  82.     public static ComboPooledDataSource getC3p0DataSource() {  
  83.         // 设置参数  
  84.         ComboPooledDataSource cpds = new ComboPooledDataSource();  
  85.         try {  
  86.             cp
推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • PHP函数实现分页含文本分页和数字分页【PHP】
    后端开发|php教程PHP,分页后端开发-php教程最近,在项目中要用到分页。分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装。影视网源码带充值系统,vscode配置根 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
author-avatar
1157476701qq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有