c3p0性能测试

        c3p0的使用我们基本已经了解,下面这个测试是用来测试c3p0的性能如何,测试有一定的局限性,仅供参考。大家可以根据项目情况来配置c3p0的各种属性值,配置之后进行测试,最终找到最合理的配置方案。

 

        1.改造我们原来的代码:
        将DataSource 提取出来,应为在实际应用之中DataSource是只创建一次,不会每次访问数据库重新创建。我们可以将之声明为static 或像下列代码中一样由外部传入。这种方式类似于Spring 对DataSource 的管理方式。
        Statement 与connection 的实例可以有多个只有用的时候才创建,用完需要close() ,否则会出现连接被占用的情况。

package com.test.jdbc.dao.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.test.jdbc.dao.TestDAO;

public class TestDAOImpl implements TestDAO {

    /**
     * c3p0实现
     */
    public void getUsrInfoWithC3P0(ComboPooledDataSource cpds,Integer usrId) {
        // c3p0的DataSource实例
        String sql="SELECT * FROM USER u WHERE u.USR_ID=" + usrId;
        try {
            // 获取连接
            Connection conn=cpds.getConnection();
            Statement st=conn.createStatement();
            ResultSet result=st.executeQuery(sql);
            result.close();
            st.close();
            conn.close();
        }catch(SQLException e) {
            e.printStackTrace();
        }
    }
}

 

 

        2.修改main 函数:
        我们做10次,100次,1000次查询数据库操作,每种情况重复100次来观察消耗时间的波动范围,因为查询1万次耗时较多这里就不做实验了。

package com.test.jdbc.main;

import java.beans.PropertyVetoException;
import java.io.IOException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.test.jdbc.dao.TestDAO;
import com.test.jdbc.dao.impl.TestDAOImpl;

public class Main {

    static String driver = "com.mysql.jdbc.Driver";

    static String jdbcUrl = "jdbc:mysql://192.168.0.1:3306/test";

    static String user = "dba";

    static String passwd = "dba";

    public static void main(String[] args) throws IOException {
        TestDAO testDAO = new TestDAOImpl();
        ComboPooledDataSource cpds = getC3p0DataSource();
        // 运行100次
        for (int i = 0; i < 100; i++) {
            queryC3p0(testDAO, cpds, 1000);
        }
    }

    /**
     * 获取c3p0数据源
     */
    public static ComboPooledDataSource getC3p0DataSource() {
        // 设置参数
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        try {
            cpds.setDriverClass(driver);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        cpds.setJdbcUrl(jdbcUrl);
        cpds.setUser(user);
        cpds.setPassword(passwd);
        cpds.setMinPoolSize(5);
        cpds.setAcquireIncrement(5);
        cpds.setMaxPoolSize(20);
        return cpds;
    }

    public static void queryC3p0(TestDAO testDAO, ComboPooledDataSource cpds,
        int count) {
        Integer usrId = 9900;
        long startMillis = System.currentTimeMillis();
        // 测试c3p0查询
        for (int i = 0; i < count; i++) {
            testDAO.getUsrInfoWithC3P0(cpds, usrId);
        }
        long endMillis = System.currentTimeMillis();
        System.out.println(endMillis - startMillis);
    }
}

 

 

        将运行结果复制到excel表格中,利用excel的图表功能生成几种测试的耗时波动图表(单位:毫秒):
       

        1.查询10次数据库,重复100次结果:



 
        2.查询100次数据库,重复100次结果:



 

        3.查询1000次数据库,重复100次结果:



        平均值:

        10次查询:61毫秒

        100次查询:680毫秒

        1000次查询: 5184毫秒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值