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),应能正常返回而不再报错

相关推荐
青山木1 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_1 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
Lethehong2 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客2 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
前端 贾公子2 小时前
第06章:结构化输出 (上)
java·服务器·前端
念何架构之路2 小时前
restartmanager-重启管理子系统
java·开发语言
Java内核笔记2 小时前
告别第三方库!Spring Boot 4 原生 API 版本控制全解析:4 种策略 + 实战案例
java·后端
小小洋洋3 小时前
OpenWrt 从U盘迁移到内置 eMMC,并完成扩容与 Docker 安装
java·docker·eureka
就改了3 小时前
SpringBoot 自定义线程池 + 实时监控指标
java·spring boot·后端
plainGeekDev3 小时前
运行时获取依赖 → 编译时注入
android·java·kotlin