spring boot druid 10秒超时问题

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、验证方法

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

  1. 查看Druid监控页面:数据源 -> 连接属性,确认socketTimeout值

  2. 测试慢查询 :执行SELECT SLEEP(15),应能正常返回而不再报错

相关推荐
阿丘Akiu1 天前
Linux部署我的世界服务器
java
折哥的程序人生 · 物流技术专研1 天前
《Java面试85题图解版(二)》进阶深化中篇:Spring核心 + 数据库进阶
java·后端·spring·面试
todoitbo1 天前
WHERE 子句中的函数执行顺序与副作用风险分析
数据库·时序数据库·函数
jiayong231 天前
MySQL 8.0 Root 用户远程登录配置完整指南
数据库·mysql
数智化管理手记1 天前
设备总停机?找准根源+TPM核心逻辑,筑牢零故障基础
数据库·人工智能·低代码·制造
SamDeepThinking1 天前
写代码不考虑前后兼容,迟早要还的
java·后端·程序员
亿牛云爬虫专家1 天前
深度解析:数据采集场景下的 Java 代理技术实战
java·开发语言·数据采集·动态ip·动态代理·代理配置·连接池复用
zhangshuang-peta1 天前
MCP + OpenClaw:执行框架如何被“约束成系统”
数据库·人工智能·ai·ai agent·mcp·peta
小小仙。1 天前
IT自学第四十二天
java·开发语言
java1234_小锋1 天前
说一下Spring的事务传播行为?
java·数据库·spring