前面已经做了c3p0的性能测试,我们这次来测试一下Druid,看看Druid的性能是否与官方说的那样优秀。
1.改造代码:
/** * Druid实现 */ public void getUsrInfoWithDruid(DruidDataSource dds,Integer usrId) { String sql="SELECT * FROM USER u WHERE u.USR_ID=" + usrId; try { // 通过属性文件设置Druid参数 conn=dds.getConnection(); Statement st=conn.createStatement(); ResultSet result=st.executeQuery(sql); result.close(); st.close(); conn.close(); } catch(Exception e) { e.printStackTrace(); } }
与c3p0代码非常类似,这里就不说了。
2.修改main函数调用方式,也是做10次查询,100次查询,1000次查询,每种查询重复100次的实验。
package com.test.jdbc.main; import java.io.IOException; import com.alibaba.druid.pool.DruidDataSource; import com.test.jdbc.dao.TestDAO; import com.test.jdbc.dao.impl.TestDAOImpl; public class Main2 { 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(); DruidDataSource dds = getDruidDataSource(); // 运行100次 for (int i = 0; i < 100; i++) { queryDruid(testDAO, dds, 1000); } } /** * 获取Druid数据源 * @return */ public static DruidDataSource getDruidDataSource() { DruidDataSource dds = new DruidDataSource(); dds.setUsername(user); dds.setUrl(jdbcUrl); dds.setPassword(passwd); dds.setDriverClassName(driver); return dds; } public static void queryDruid(TestDAO testDAO, DruidDataSource dds, int count) { Integer usrId = 9900; long startMillis = System.currentTimeMillis(); // 测试c3p0查询 for (int i = 0; i < count; i++) { testDAO.getUsrInfoWithDruid(dds, usrId); } long endMillis = System.currentTimeMillis(); System.out.println(endMillis - startMillis); } }
将运行结果复制到excel表格中,利用excel的图表功能生成几种测试的耗时波动图表(单位:毫秒):
1.查询10次数据库,重复100次结果:
2.查询100次数据库,重复100次结果:
3.查询1000次数据库,重复100次结果:
平均值:
10次查询:47.5毫秒
100次查询:493.5毫秒
1000次查询: 5162毫秒
在负载较小的情况下Druid的优势比较明显,在大规模查询情况下也表现出来比较好的性能,至少不比c3p0差。
相关推荐
1. **高性能**:Druid通过优化的连接池算法和内置的Connection状态检测机制,保证了在高并发环境下仍能保持良好的性能。例如,其使用了双端队列进行连接的分配与回收,减少了锁的使用,提高了并发效率。 2. **健康...
数据源性能测试用例,C3P0,Druid,Tomcat 解压缩密码,去blog找吧http://blog.csdn.net/xzknet/article/details/49127701
Druid是一个功能强大且性能优异的数据源连接池,而PostgreSQL则是一种流行的开源关系型数据库管理系统。本教程将详细介绍如何在Java项目中使用Druid数据连接池连接PostgreSQL数据库,以实现一个简单的测试环境。 ...
Druid是阿里巴巴开源的一个强大、灵活且高性能的Java数据库连接池组件。它提供了监控、SQL解析、执行性能统计等多种功能,广泛应用于各种Java企业级项目中。Druid-1.2.8版本源码的分析可以帮助我们深入理解其内部...
5. **测试代码**:创建`druid-test`包,编写测试类`DruidTest`,使用`@Autowired`注入DataSource,并进行数据库操作测试,验证Druid连接池的功能。 【Druid核心特性】 1. **性能优异**:Druid提供了连接池的性能...
7. **连接有效性检测**:Druid支持定时检测数据库连接的有效性,避免因长时间无操作导致的连接失效问题。 8. **扩展性**:Druid设计上考虑了扩展性,可以通过插件机制添加自定义的监控、拦截等功能。 在"druid-...
Druid针对数据库连接池的性能进行了深度优化,比如快速创建和关闭连接、高效的预读取机制、连接有效性检测等。此外,Druid还支持Statement缓存,减少JDBC对象的创建和销毁开销,进一步提升系统性能。 4. **SQL解析...
这个源码包包含了Druid的所有源代码,包括核心组件、扩展模块以及相关的测试用例。通过分析源码,我们可以学习到以下几个关键知识点: 1. **连接池设计**:Druid连接池提供了线程安全的数据库连接管理,它支持连接...
在1.1.9这个正式版本中,Druid已经经过了大规模的压力测试,确保了其稳定性和性能,是许多企业级应用中的首选数据库连接池。 Druid的核心特性包括: 1. **性能监控**: Druid提供了一个强大的监控统计功能,可以...
Druid提供了一系列接口和事件监听器,可以自定义拦截器、连接验证器、连接测试器等,以满足特定需求,如添加自定义的日志记录、监控规则等。 6. **Druid的性能优化** 通过合理设置连接池参数,如最小连接数、最大...
作为 Java 开发者,了解并掌握 Druid 数据源对于优化数据库访问性能具有重要意义。 1. **Druid 的优点** - **监控功能**: Druid 内置了丰富的监控统计功能,可以实时查看数据库连接池的状态,如连接数、SQL 执行...
1. **连接池性能**:Druid在连接创建、销毁、获取和释放等环节进行了大量优化,减少了锁竞争,提升了并发性能。 2. **内存管理**:Druid对内部数据结构进行了内存优化,如使用`ConcurrentHashMap`替代`Hashtable`,...
- **防御机制**: Druid具备防止SQL注入的功能,通过SqlParser解析SQL,可以检测并阻止潜在的危险SQL语句。 - **扩展性**: 支持自定义拦截器(Filter),可以实现连接池的扩展功能,如日志记录、性能监控、SQL审计...
本测试包针对`Druid`与`Spring`的集成进行了详尽的配置,旨在展示如何利用`Druid`进行数据源管理以及监控,同时包含了方法名正则匹配的拦截器配置,以实现更精细的事务管理和性能分析。 `Druid`的主要优势在于其...
6. **连接有效性检测**:Druid提供了连接有效性检测机制,可以定期检查并验证数据库连接是否有效,防止因网络问题导致的无效连接占用资源。 7. **配置友好**:Druid的配置方式灵活,可以通过XML、Java代码或者...
6. **连接池生命周期管理**:Druid提供了完善的连接检查和回收机制,如超时检测、空闲连接检测等,确保连接的健康性。 7. **配置灵活性**:Druid提供了多种配置方式,可以通过XML、Java代码或者Spring的Bean配置,...
1. **性能优异**:Druid通过内部优化,如Statement缓存、预编译SQL以及连接池的精细控制,确保了在高并发场景下依然能保持出色的性能。 2. **强大的监控功能**:Druid内置了WebStatFilter和StatViewServlet,可以...