注册
druid报错处理:Communication error、Read timed out
专栏/技术分享/ 文章详情 /

druid报错处理:Communication error、Read timed out

Dora 2026/01/09 194 0 0
摘要

现象

报错信息 Communication error
查看下方还存在 Read timed out

Cause: dm.jdbc.driver.DMException: Communication error
Communication error; nested exception is dm.jdbc.driver.DMException: Communication error] with root cause
java.net.SocketTimeoutException: Read timed out

大多数情况都认为是数据库原因,但该问题为druid连接池默认超时限制导致,排查数据库信息发现并无异常

原因排查

开启jdbc日志可看到
setNetworkTimeout参数传入10000,为druid默认配置,当sql执行超过10s就自动断开了

进行测试查询,10s则断开连接,返回预期报错

[INFO  - 2026-01-04 11:13:35.047] tid:1 - [main] { conn-1 } setNetworkTimeout(SynchronousExecutor, Integer);  [PARAMS]: com.alibaba.druid.pool.DruidAbstractDataSource$SynchronousExecutor@29fc1a2b, 10000; [USED TIME]: 0.0204ms;

image.png

image.png

到DruidPlugin.start方法中DataSource的初始化
进入DruidDataSource,找到init方法,DruidDataSource在socketTimeout未定义的情况下,会将其设置为10s,(原生jdbc是0,即不超时)导致超时10s的操作都自动断开

image.png

解决办法

druid不支持达梦socketTimeOut等参数,所以url配置socketTimeOut等参数无效

方法1
DruidPlugin start之后,拿到DataSource对象,设置超时时间即可
image.png

方法2
连接池配置加上参数
connectTimeout: 66666
socketTimeout: 66666
image.png
查询测试默认超时时间已修改
image.png

参考链接

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服