dbcp droid c3p0 数据库连接池亲测

一.为什么要java 连接池

若jdbc 每一次查询都要加载驱动class.for 执行查询 关闭连接等,在一个公共托管的互联网应用程序中,为每个用户打开一个连接是不可行的,因为在这个应用程序中同时出现的用户数量可能非常多。因此,开发人员通常希望在应用程序的所有当前用户之间共享一个开放连接的“池”(apache dbcp旗下居然支持1.8) 在任何给定时间实际执行请求的用户数通常只占活动用户总数的很小百分比,并且在请求处理期间只需要数据库连接。应用程序本身登录到DBMS,并在内部处理任何用户帐户问题。

一句话说:由于建立数据库连接是一个非常耗时资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

市面上 dbcp,c3p0,alibaba druid

三.为啥么用dbcp,以及要改?

1.例如1秒内 2个提交订单 (这边一个订单将近10次查询更新 lian生活实际为例) ([DB]DBConnectionManager.close error:java.sql.SQLException: Already closed.)

2.另外([INFO] [2021-03-27 03:00:26][ACTION]BackupDB successful!cost time=23037ms) 未更新之前

mysql jdbc 分页查询的坑

ps:为什么不用alibaba druid,因为最低要求1.8,目前线上是1.7,另外Last Published: 25 September 2020(我还能更新,哈哈)

四.具体怎么改

1.将commons-pool2-2.4.2.jar commons-dbcp2-2.4.0.jar 替换进去

2.

关于1.2 dbcp

100个thread 去执行 方法(一个方法含有4个查询 2个插入1个删除),出现DBUtilAutoTran.getResultsMap read from row12  errorjava.sql.SQLException: Operation not allowed after ResultSet closed

关于2.4 dbcp

A.100个thread 去执行 方法(一个方法含有4个查询 2个插入1个删除),未报错

B.1.4秒一次,共10次 ,去执行上述100个thread 未报错,因为datasource 文件pool_max_idle=50

3.启动

五 性能问题

测试方法:

我自己在servelet 由于阿里云内网mysql ,直接进行一个方法含有4个查询 2个插入1个删除

37秒内=10次请求 且100个thread ,一个方法里面含有4个查询 2个插入1个删除

日志

初始实例化50个线程池  

[INFO] [2021-03-27 15:16:14][TONGJI]from: service ip:220.202.224.68 full url:>>>Mozilla/5.0 (Windows NT 6.1; Win 开始

[INFO] [2021-03-27 15:16:51][TONGJI]thread(ms):23375 结束

阿里云(一台4g内存2核)监控看出 cpu 最高值60%

内存达到 22%

 

六.其他备注

 

dbcp版本情况(apache 旗下
在Java8及更高版本上运行的应用程序应该使用DBCP2.7.0二进制文件。

在Java8及更高版本上运行的应用程序应该使用DBCP2.6.0二进制文件。

在Java8下运行的应用程序应该使用DBCP2.5.0二进制文件。

在Java7下运行的应用程序应该使用DBCP2.4.0二进制文件。

在Java6下运行的应用程序应该使用DBCP1.4二进制文件。

在Java1.4和5.0下运行时,应该使用DBCP1.3。

Java三种连接池(druid、c3p0、dbcp)怎么用

dbcp mysql驱动 pool.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值