记录一次driud连接池的连接数用完问题

项目因数据导入功能引发的事务阻塞,导致连接池耗尽资源。通过分析发现事务、循环代码问题及并发执行,解决方法包括异步导入和调整系统执行顺序。

 一、问题描述:

        最直观的表现就是生产上项目崩了,无法访问。

二、分析原因:

        通过查看生产日志,出现了大量的获取连接超时异常,具体如下:

org.springframework.jdbc.CannotGetJdbcConnectionException:Failed to obtain JDBC Connection;nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException:  
wait millis 60000,active 20,maxActive 20,creating 0,runningSqlCount20: UPDATE TAB_A SET  F1_NAME=?,F2=?,F3=? WHERE ID=?

我们项目druid的最大连接数配置的是20,最大等待时间是60s

从报错日志可以看出20连接全部被占用了,没有可用的连接了。

通过打印的堆栈信息找到对应的代码,结合业务场景。大概如下:

        大概是我们有一个功能是从execl导入大量数据,这个导入功能读取到execl数据后,循环遍历每条记录,如果判断这条数据已经存在,这根据id更新多个字段内容,如果数据不存在则是插入记录。且这个导入功能的接口上加了事务注解。还有一个就是代码问题,这个导入接口的循环代码写的有问题,造成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路奔跑1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值