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

相关推荐
江湖中的阿龙4 分钟前
Redis 五大核心数据类型底层原理
数据库·redis·缓存
码上有光5 分钟前
c++: 继承(下)
android·java·c++·多继承·菱形继承·虚继承
JAVA9655 分钟前
JAVA面试-并发篇 02-synchronized 锁可以重入吗
java·面试
RemainderTime10 分钟前
Spring Boot脚手架集成Sa-Token实现生产级RBAC权限管理
java·spring boot·后端·系统架构
世界尽头与你11 分钟前
Spring Boot Watcher 未授权访问漏洞
spring boot·安全·网络安全·渗透测试
韦胖漫谈IT12 分钟前
选语言不是站队,是选适合问题的工具
java·python·ai·rust·go·技术落地
lpd_lt15 分钟前
AI生成Spring Boot + Vue 3 + MySQL + MyBatis-Plus的项目实战
java·spring boot·vue·ai编程
JAVA面经实录91715 分钟前
Kafka 全套学习知识手册
java·kafka
绝知此事16 分钟前
RabbitMQ 从入门到精通:Spring Boot 实战三部曲(三)—— 高级应用与性能优化
spring boot·rabbitmq·java-rabbitmq
源图客19 分钟前
【亚马逊 SP-API 实战】Java 批量创建变体 Listing(父商品 + 子变体 + 独立图片)完整教程(亲测可用)
java·大数据·python