在项目中使用c3p0作为数据库连接池,被技术总监怼了

本文通过一个实际项目经验分享,讲述了在并发环境下c3p0作为数据库连接池的性能问题。作者进行了详细的性能测试,包括dbcp、c3p0和druid三种连接池在插入大量数据时的表现,结果显示druid在性能和稳定性上优于c3p0,而postgresql在数据库性能上优于mysql和oracle。
摘要由CSDN通过智能技术生成

介绍

数据库连接是一项非常关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。

记得之前做的一个项目,当时的应用程序配置的c3p0数据库连接池,最大允许的连接数是500,结果上线没多久,并发量直接上来了,导致大量的数据插入失败,当晚的心情可想而知~

从那一次事故之后,让我对应用程序的数据库连接数有了一次深刻的认识,为了防止再次栽跟头,特意抽了一个时间来编写程序测试案例,用于测试各个数据源连接池的稳定性,以防止自己再次踩坑!

话不多说,直接撸起来!

二、程序实例

熟悉 web 系统开发的同学,基本都知道,在 Java 生态中开源的常用数据库连接池有以下几种:

  • dbcp:DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP
  • c3p0:c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection和Statement池的DataSources对象
  • druid:阿里出品,淘宝和支付宝专用数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。

今天我们就一起来对比一下,这三种数据源连接池的稳定性。

2.1、创建测试表

下面以 mysql 数据库为例,首先创建一个t_test表,方面后续进行插入数据操作。

CREATE TABLE t_test (
  id bigint(20) unsigned NOT NULL COMMENT '主键ID',
  name varchar(32) NOT NULL COMMENT '名称',
  PRIMARY KEY (id)
) ENGINE=InnoDB COMMENT='测试表';

2.2、 编写测试用例

以dbcp为例,首先创建一个dbcp-jdbc.properties配置文件。

username=root
password=Hello@123456
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.31.200:3306/testdb?useUnicode=true&characterEncoding=UTF-8
initialSize=5
maxActive=1000
maxIdle=5
removeAbandoned=ture
removeAbandonedTimeout=20
logAbandoned=true
maxWait=100

接着,创建一个连接池工具DbcpJdbcUtil。

public class DbcpJdbcUtil {
 
 private static final Logger logger = LoggerFactory.getLogger(DbcpJdbcUtil.class);
 
 /**jdbc配置文件*/
 private static Properties prop = new Properties(); 
 
 private static BasicDataSource dataSource = null;
 // 它是事务专用连接!
 private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
 
 static {
  classPathSourceRead();
 }

    private static void classPathSourceRead(){
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值