批量导入时间过长导致Durid的空闲连接时间长自动关闭,如何解决?
技术背景:
Java、Spring全家桶、MySQL、Druid链接池
问题场景:
现在需要做一个批量退款功能,但因为最核心的微信、支付宝等三方退款是不支持的接口模式的批量退款,只有单次退款,这就导致我需要for循环去单次处理,导致处理时间较长,当批量处理1000个的时候,就会出现问题,Druid连接池会断开连接,导致数据没存到MySQL数据库中
discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/my_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, version : 1.2.5, lastPacketReceivedIdleMillis : 65682
里面的敏感数据已经清楚,但报错信息还是很清晰的
问题分析:
因为当数量较少时,是不会有这个问题,但当数量偏大了,就一定会出现这个问题,有没有在不改变Druid断开时长的方式,来解决这个问题。
也有想法说要不 用异步+分模块的方式来解决,但这样需要怎么做呢,分模块之后 怎么收集保持原有的顺序呢?
有没有老哥有经验啊?
回答:
你可以尝试添加在spring.datasource 下 use-ping-method: false
这个属性
spring.datasource.druid.mysql.usePingMethod 是 Druid 数据库连接池的一个配置参数,用于指定是否使用 ping 方法来检测数据库连接是否有效。该参数的默认值为 false,即默认不使用 ping 方法。
在 Druid 数据库连接池中,检测连接是否有效的方式有两种:一种是执行 SQL 语句来检测连接是否有效,另一种是使用 ping 方法来检测连接是否有效。使用 ping 方法可以更快速地检测连接是否有效,但是在某些情况下,可能会出现误判。例如,如果数据库服务器反应较慢,ping 方法可能会将连接判定为无效,从而导致连接关闭。
以上是 批量导入时间过长导致Durid的空闲连接时间长自动关闭,如何解决? 的全部内容, 来源链接: utcz.com/p/945427.html