From ee31128304a948794418303367ecda1244cd607b Mon Sep 17 00:00:00 2001 From: wincher Date: Wed, 22 Feb 2023 01:29:10 +0800 Subject: [PATCH] fix #5079 SQLServer socketTimeout support loginTimeout in second , socketTimeout in millisecond fix #5096 Postgres modify timeout value unit from milliseconds to seconds wrong field assignment --- .../alibaba/druid/pool/DruidAbstractDataSource.java | 12 ++++++++++-- .../java/com/alibaba/druid/pool/DruidDataSource.java | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 77ad1016ac..d1d36520b0 100644 --- a/core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -45,6 +45,7 @@ import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.concurrent.atomic.AtomicLongFieldUpdater; import java.util.concurrent.locks.Condition; @@ -1763,8 +1764,15 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements physicalConnectProperties.put("oracle.net.CONNECT_TIMEOUT", connectTimeoutStr); } else if (driver != null && "org.postgresql.Driver".equals(driver.getClass().getName())) { - physicalConnectProperties.put("loginTimeout", connectTimeout); - physicalConnectProperties.put("socketTimeout", socketTimeout); + physicalConnectProperties.put("loginTimeout", Long.toString(TimeUnit.MILLISECONDS.toSeconds(connectTimeout))); + if (socketTimeout > 0) { + physicalConnectProperties.put("socketTimeout", Long.toString(TimeUnit.MILLISECONDS.toSeconds(socketTimeout))); + } + } else if (dbTypeName.equals(DbType.sqlserver.name())) { + physicalConnectProperties.put("loginTimeout", Long.toString(TimeUnit.MILLISECONDS.toSeconds(connectTimeout))); + if (socketTimeout > 0) { + physicalConnectProperties.put("socketTimeout", Integer.toString(socketTimeout)); + } } } diff --git a/core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 528881ca44..cd398af9c5 100644 --- a/core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -826,7 +826,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } if (connectTimeout == 0) { - socketTimeout = DEFAULT_TIME_CONNECT_TIMEOUT_MILLIS; + connectTimeout = DEFAULT_TIME_CONNECT_TIMEOUT_MILLIS; } if (socketTimeout == 0) {