报错信息 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;
到DruidPlugin.start方法中DataSource的初始化
进入DruidDataSource,找到init方法,DruidDataSource在socketTimeout未定义的情况下,会将其设置为10s,(原生jdbc是0,即不超时)导致超时10s的操作都自动断开
druid不支持达梦socketTimeOut等参数,所以url配置socketTimeOut等参数无效
方法1
DruidPlugin start之后,拿到DataSource对象,设置超时时间即可
方法2
连接池配置加上参数
connectTimeout: 66666
socketTimeout: 66666
查询测试默认超时时间已修改
文章
阅读量
获赞
