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参数,并且配置值不能太长

相关推荐
大飞pkz4 分钟前
【设计模式】代理模式
开发语言·设计模式·c#·代理模式
珹洺5 分钟前
Java-Spring入门指南(十一)代理模式与Spring AOP实战
java·spring·代理模式
JAVA学习通16 分钟前
微服务项目->在线oj系统(Java-Spring)--增删改
java·开发语言·spring
闲人编程16 分钟前
告别Print: Python调试入门,用PDB高效找Bug
开发语言·python·bug·调试·pdb·断点设置
AI量化投资实验室19 分钟前
年化422%,回撤7%,夏普比5.4| Deap因子挖掘新增qlib因子库,附python代码
开发语言·python
道可到23 分钟前
字节面试 Java 面试通关笔记 03| java 如何实现的动态加载(面试可复述版)
java·后端·面试
聪明的笨猪猪25 分钟前
Spring Boot & Spring Cloud高频面试清单(含通俗理解+生活案例)
java·经验分享·笔记·面试
LoveXming31 分钟前
Chapter9—享元模式
java·c++·设计模式·享元模式·开闭原则
Dontla37 分钟前
Next.js项目演示(从零创建Next.js项目)Next.js入门实战
开发语言·javascript·ecmascript
eqwaak037 分钟前
科技信息差(9.29)
开发语言·科技·学习·算法