[alibaba/druid]druid 1.2.16在Oracle数据库上connectTimeout和socketTimeout配置无效?

2025-11-05 951 views
9

druid 1.2.16版本使用Oracle数据库,配置connectTimeout和socketTimeout两个属性无效,但实际在执行超时10秒的SQL查询时,就报错:oracle.net.nt.TimeoutInterruptHandler$IOReadTimeoutException: Socket read timed out,而且都是到10秒就超时,看了一下源码,这两个属性只对Mysql设置用效,大家有没有出现这样的问题?

`private void initFromUrlOrProperties() { if (jdbcUrl.startsWith("jdbc:mysql://")) { if (jdbcUrl.indexOf("connectTimeout=") != -1 || jdbcUrl.indexOf("socketTimeout=") != -1) { String[] items = jdbcUrl.split("(\?|&)"); for (int i = 0; i < items.length; i++) { String item = items[i]; if (item.startsWith("connectTimeout=")) { String strVal = item.substring("connectTimeout=".length()); setConnectTimeout(strVal); } else if (item.startsWith("socketTimeout=")) { String strVal = item.substring("socketTimeout=".length()); setSocketTimeout(strVal); } } }

        Object propertyConnectTimeout = connectProperties.get("connectTimeout");
        if (propertyConnectTimeout instanceof String) {
            setConnectTimeout((String) propertyConnectTimeout);
        } else if (propertyConnectTimeout instanceof Number) {
            setConnectTimeout(((Number) propertyConnectTimeout).intValue());
        }

        Object propertySocketTimeout = connectProperties.get("socketTimeout");
        if (propertySocketTimeout instanceof String) {
            setSocketTimeout((String) propertySocketTimeout);
        } else if (propertySocketTimeout instanceof Number) {
            setSocketTimeout(((Number) propertySocketTimeout).intValue());
        }
    }
}`

回答

6

我也遇到这种问题,感觉现在1.2X的版本很不稳定啊。

4

我也遇到这种问题,感觉现在1.2X的版本很不稳定啊。

从源码来看,只对MySql的配置有效,但其他数据库配与配都是默认的10s

7

给这个issuse提提速

4

开源软件又不是商业软件,提了issue也未必有回应,还不如自己动动手。 或者参照社区文档,搞个xml自己配,只要druid适配的驱动属性都能自己配。 https://www.alibabacloud.com/help/zh/analyticdb-for-mysql/user-guide/druid-connection-pool-1

 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
     <property name="DruidAbstractDataSource或者DruidDataSource的属性变量名" value="对应的值" />
     <property name="connectTimeout" value="111" /> 
     <property name="socketTimeout" value="222" />
 </bean>