java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > spring boot druid 超时

spring boot druid 10秒超时问题的解决

作者:xixingzhe2

本文详解Druid 1.2.12至1.2.21版本默认socketTimeout导致的慢查询报错问题,并提供升级到1.2.22或显式配置超时参数的解决方案,助你快速恢复长耗时SQL的正常执行

1、BUG详情:Druid擅自设置10秒默认超时

问题根源

从Druid官方1.2.22版本的Release Notes中可以明确看到:

优化超时设置默认逻辑。针对 1.2.12开始的connectTimeout和socketTimeout在没指定配置的情况下默认为10秒情况,去除该默认逻辑。在没配置这两个参数的情况下,超时设置行为与以前保持一致。去除timeout默认值为10秒的逻辑 #5729 #5735

版本行为对照表

druid版本列表

版本范围socketTimeout默认行为慢查询表现
1.2.11及更早无默认值(遵循JDBC驱动默认值0,无限等待)30秒查询正常返回
1.2.12 - 1.2.21强制设为10秒(无论是否配置)10秒准时报错
1.2.22及以后恢复旧版行为,无默认10秒限制正常执行

Druid官方为何要加这个默认限制?

官方解释是:新增默认connectTimeout(10秒)和socketTimeout(10秒),用于减少网络丢包时连接池无法创建连接的问题,提升连接池健壮性。

这本质是"防御性配置",但忽略了长耗时SQL(如统计分析、批量处理)的场景。

2、解决方案

方案1:升级Druid版本(推荐)

直接升级到1.2.22或更高版本,BUG已被修复:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.28</version> <!-- 使用最新稳定版 -->
</dependency>

方案2:显式配置超时时间(不升级版本)

如果暂时无法升级,必须显式配置这两个参数:

spring:
  datasource:
    druid:
      connect-timeout: 60000    # 60秒,单位毫秒
      socket-timeout: 60000     # 60秒,单位毫秒

3、验证方法

配置后可通过以下方式验证是否生效:

到此这篇关于spring boot druid 10秒超时问题的解决的文章就介绍到这了,更多相关spring boot druid 超时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文