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

相关推荐
Seven971 分钟前
【设计模式】从智能音箱到软件设计:探索外观模式的实际应用案例
java·后端·设计模式
功德+n2 分钟前
Apache Log4j 2
java·开发语言·log4j·maven·apache
YGGP4 分钟前
【每日八股】Golang篇(三):关键字(下)
开发语言·后端·golang
Seven975 分钟前
【设计模式】如何通过桥接模式解决系统扩展难题?
java·后端·设计模式
CodeCraft Studio14 分钟前
PDF处理控件Aspose.PDF,如何实现企业级PDF处理
java·python·pdf
Seven9718 分钟前
【设计模式】告别继承噩梦:用装饰者模式简化代码结构
java·后端·设计模式
九丶黎25 分钟前
爬虫案例十一js逆向数位观察网
开发语言·javascript·爬虫
网络安全指导员33 分钟前
kali linux 漏洞扫描
linux·运维·开发语言·网络·安全·web安全
Run_Teenage43 分钟前
C语言每日一练——day_3(快速上手C语言)
c语言·开发语言
caihuayuan51 小时前
「mysql」Mac mysql一路畅通式安装
java·大数据·spring boot·后端·课程设计