jdbc设置StatementTimeout后还需要设置socket timeout参数吗

背景

我们设置JDBC参数时,不管有没有在Statement中配置超时时间StatementTimeout,我们都需要配置jdbc的socket timeout参数,那么为什么这个socket timeout参数如此必要,不设置又会怎么样?

问题真相

首先设置了StatementTimeout只是表示如果sql的超时时间到了,会通过socket发送Cancel指令给mysql取消超时语句的执行,但是如果此时网络有问题,导致Cancel执行在网络中的某个地方被交换机hold住,那么此时jdbc连接就会进入等待状态,等待的时间由min(socket timeout, keepalive timeout)的最小值决定,下面的图展示了设置socket timeout参数和不设置socket timeout参数时jdbc连接的情况

从图中可知,为了防止出现网络问题时,尽快释放有问题的jdbc连接并重建,我们需要配置socket timeout参数,并且配置值不能太长

相关推荐
彭于晏Yan几秒前
SpringBoot优化树形结构数据查询
java·spring boot·后端
AAA修煤气灶刘哥17 分钟前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
上位机付工18 分钟前
C#与倍福TwinCAT3进行ADS通信
开发语言·c#
练习时长一年23 分钟前
Spring事件监听机制(三)
java·后端·spring
月阳羊23 分钟前
【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
java·经验分享·嵌入式硬件·面试
励志不掉头发的内向程序员27 分钟前
STL库——二叉搜索树
开发语言·c++·学习
2301_7813925232 分钟前
用spring框架实现简单的MVC业务
java·后端·spring
phltxy37 分钟前
SpringMVC 程序开发
java·后端·spring
至此流年莫相忘41 分钟前
设计模式:模板方法模式
java·开发语言·设计模式
人机10144 分钟前
Spring Security - FilterChainProxy
java