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毫秒
相关推荐
数据源性能测试用例,C3P0,Druid,Tomcat 解压缩密码,去blog找吧http://blog.csdn.net/xzknet/article/details/49127701
2. 自动管理:C3P0能自动检测并回收空闲超时的连接,防止资源浪费。同时,它还支持自动重试机制,如果连接因网络问题断开,C3P0会尝试重新建立连接。 3. 连接测试:C3P0提供了多种测试连接有效性的策略,如简单的...
3. **异常处理**:如果检测到数据库连接出现问题,如超时或网络故障,C3P0会自动尝试恢复连接,确保应用程序的连续性。 4. **性能监控**:C3P0提供了丰富的统计信息,包括连接使用情况、异常信息等,有助于开发者...
- 自动检测:C3P0具有自动检测失效连接并进行回收的能力,确保应用使用的连接始终有效。 - 扩展性:C3P0允许配置多个数据源,便于系统扩展和负载均衡。 - 动态调整:可以动态调整连接池的大小,适应系统负载的...
C3P0的一些关键特性包括自动检测并回收无效连接、连接测试策略、连接生命周期管理等。 2. **hibernate-c3p0-4.0.0.Final[1].jar**: 这个JAR文件是Hibernate对C3P0连接池的支持模块。Hibernate是一个流行的Java对象...
2. 自动检测与回收:C3P0支持定期检查连接的健康状态,若发现连接已断开或不可用,会自动销毁并重新创建新的连接,确保应用的稳定性。 3. 超时与空闲连接处理:C3P0允许设置连接的获取、使用和空闲超时,避免长时间...
2. **自动检测与回收**:C3P0可以定期检查连接的有效性,发现无效或损坏的连接时会自动回收,保证了应用的稳定性。 3. **连接池参数调整**:C3P0提供了丰富的配置选项,允许用户根据实际需求调整连接池的大小、超时...
C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...
2. **自动检测和回收死锁**:C3P0具有内置的机制来检测和处理长时间未使用的连接,避免因数据库连接泄漏导致的问题。 3. **连接测试**:在分配给应用程序之前,C3P0会自动对数据库连接进行有效性测试,确保获取的...
2. **自动检测与回收**:C3P0可以定期检查池中的连接是否有效,如果发现无效或过期的连接,会自动进行回收,以确保应用始终能获得健康的数据库连接。 3. **连接池扩展性**:C3P0允许用户自定义连接池的最大和最小...
C3P0是一个完全兼容JDBC3规范的连接池实现,提供了连接测试、空闲连接检测、自动关闭无效连接等功能。其主要优势在于它可以自动管理数据库连接的创建和释放,减少了频繁建立和关闭连接的开销,从而提高了系统的运行...
3. **自动检测与恢复**:C3P0具有检测失效连接并自动替换的功能,确保连接池中的每个连接都是有效的。通过`testConnectionOnCheckout`和`testConnectionOnCheckin`属性,可以在获取和归还连接时进行健康检查。 4. *...
- **异常处理**:C3P0提供了异常检测和处理机制,当数据库连接出现问题时,它会尝试重新建立连接,确保应用的稳定性。 - **线程安全**:C3P0完全支持多线程环境,每个线程都能获取到独立的数据库连接,互不干扰。 ...
在Java Web开发中,C3P0常被用于管理和维护数据库连接资源,以提高应用程序的性能和响应速度。以下是对C3P0配置与使用的详细步骤和关键知识点的阐述。 ### 配置init.properties文件 在使用C3P0前,首先需要配置`...
C3P0的主要功能包括自动管理数据库连接的创建、分配、回收和销毁,以及在数据库连接空闲时进行检测和维护,确保连接的有效性。 `mchange-commons-java-0.2.10.jar`是Mchange Commons Java库,它是C3P0的依赖库,...
- **连接生命周期管理**:C3P0提供自动的连接回收、检测和重用机制,以确保连接的有效性和安全性。 - **异常处理**:C3P0库对数据库操作的异常进行了封装,提供了更友好的错误处理方式。 - **池化对象...
C3P0的源码分析可以帮助开发者深入理解其内部工作机制,包括连接的创建、检测、回收以及异常处理等。源码中的关键类有`ComboPooledDataSource`(数据源)、`PoolableConnectionFactory`(连接工厂)和`...