[alibaba/druid]对于PostgreSQL,提交了connectTimeout错误

2025-11-10 858 views
1

在DruidAbstractDataSource中 的 createPhysicalConnection 方法中, if (driver != null && "org.postgresql.Driver".equals(driver.getClass().getName())) { if (connectTimeoutStr == null) { connectTimeoutStr = Integer.toString(connectTimeout); } physicalConnectProperties.put("loginTimeout", connectTimeoutStr);

            if (socketTimeoutSr == null) {
                socketTimeoutSr = Integer.toString(socketTimeout);
            }
            physicalConnectProperties.put("socketTimeout", socketTimeoutSr);
        }

当数据库时 postgresql时,使用connectTimeout的值传递 loginTimeout 属性至 postgresql的Driver中,用以创建物理连接,但org.postgresql.Driver 中会将 loginTimeout认为是以秒单位,详见方法 Driver中的 private static long timeout(Properties props) 方法

回答

4

您说得对,从 README.md 文件中可以看出,loginTimeout/connectTimeout/socketTimeout 是 pg 驱动程序的三个不同选项,单位为秒。

https://github.com/pgjdbc/pgjdbc/blob/2b90ad04696324d107b65b085df4b1db8f6c162d/README.md https://github.com/pgjdbc/pgjdbc/search?q=socketTimeout&type =

8

https://github.com/alibaba/druid/releases/tag/1.2.16 问题已修复,请用新版本

6

DruidDataSource::init()

if (connectTimeout == 0) { socketTimeout = DEFAULT_TIME_CONNECT_TIMEOUT_MILLIS; }

这个怎么还没改?

4

fixed now: https://github.com/alibaba/druid/commit/06b8ac173a10ce4ff9b12824de4165ae4afe4947