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

相关推荐
wuk99814 小时前
matlab为地图进行四色着色
开发语言·matlab
_MyFavorite_14 小时前
cl报错+安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
charlie11451419114 小时前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
zmzb010314 小时前
C++课后习题训练记录Day55
开发语言·c++
李白同学14 小时前
C++:继承
开发语言·c++
k***921614 小时前
【C++】STL详解(九)—priority_queue的使用与模拟实现
开发语言·c++
速易达网络14 小时前
基于Java TCP 聊天室
java·开发语言·tcp/ip
沿着路走到底14 小时前
JS事件循环
java·前端·javascript
Hard but lovely15 小时前
C++11: 自定义异常&&标准异常体系&&回顾c异常处理方式
开发语言·c++
爱笑的眼睛1115 小时前
超越 `cross_val_score`:深度解析Scikit-learn交叉验证API的架构、技巧与陷阱
java·人工智能·python·ai