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

相关推荐
Nturmoils2 分钟前
Oracle 迁移评估时,我把这两类问题列在了检查清单最前面
数据库
Database_Cool_13 分钟前
数据库性能不够用,升级到什么方案好?阿里云 PolarDB(云原生数据库领导者,兼容 MySQL/PostgreSQL/Oracle)平滑升级与百倍弹性
数据库·阿里云·云原生
程序猿秃头之路17 分钟前
DDD 系列:聚合和聚合根详解
数据库·oracle·ddd·领域驱动设计
咸鱼翻身小阿橙1 小时前
多线程解析
java·开发语言
码上上班1 小时前
Mongodb课程
数据库·mongodb
农村小镇哥1 小时前
Oracle中的锁和10704对高级队列锁
数据库·oracle
一枚码农出身的猎头1 小时前
岗位招聘:架构师,base湖南长沙,70-80w
java·架构
峥无1 小时前
SQL性能调优:从执行计划看懂索引的使用与失效
数据库·sql
xyj29175964112 小时前
在Trae中配置数据库MCP
数据库·ai·mcp
廋到被风吹走2 小时前
【AI】【Claude】从 Prompt 到 Agent 的完整进阶地图
数据库·人工智能·prompt