hicaricp pool:No operations allowed after connection closed以及Connection is not available错误处理

场景:

输入:一个大的json数组,将每个数组中的对象插入到数据库中(这个大的json数组中有129个对象)

问题:

未使用批量插入时,使用的是spring boot 2.2.0,spring data jpa,默认使用hikari cp连接池

hikariPool报错:

HikariPool-1 - Failed to validate connection com.mysql.jdbc.JDBC4Connection@3e471d67

(No operations allowed after connection closed.).

Possibly consider using a shorter maxLifetime value.

以及

HikariPool-1 - Connection is not available, request timed out after 30049ms.

发现其都是在插入129个对象的时候发生

 

原因:

第一个错误:No operations allowed after connection closed,异常的原因是mysql服务器主动关闭了连接(mysql参数 wait-timeout),而客户端还在用那个连接去操作。所以其提示我们把hicariCP连接池的maxLifetime时间调整为短语mysql的max-timeout,这样再连接被mysql服务器断开之前,连接池自己关闭此连接,重新生成一个新的连接。这个错误是正常的情况说明。

第二个错误:Connection is not available,其产生的原因就是connectionTimeout = 30,30秒内一个请求还没有获取到connection,于是报错。

猜测就是插入的时候,使用了多个connection,造成connection不够用造成的

 

解决方法:

在sping data jpa中实现批量插入

业务代码:

List<Hospital> data =JSON.parseArray(msgBody, Hospital.class);

hospitalRepository.saveAll(data);

配置:(重要

spring.jpa.properties.hibernate.jdbc.batch_size=150


配置了druid查看一下

参考:spring data jpa开启批量插入、批量更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值