This is an automated email from the ASF dual-hosted git repository.

wenjun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new e55c321a4f [Fix-17464] Use Driver to create jdbc connection (#18033)
e55c321a4f is described below

commit e55c321a4f617c2991667fca1f298bef5cf1468e
Author: Wenjun Ruan <[email protected]>
AuthorDate: Wed Mar 11 14:02:06 2026 +0800

    [Fix-17464] Use Driver to create jdbc connection (#18033)
---
 .../api/datasource/DataSourceProcessor.java        |  6 +--
 .../api/datasource/JdbcConnectionProvider.java     | 27 +++++++++++
 .../datasource/JdbcDriverConnectionProvider.java   | 52 ++++++++++++++++++++++
 .../athena/param/AthenaDataSourceProcessor.java    | 14 +++---
 .../param/AzureSQLDataSourceProcessor.java         | 15 ++++---
 .../param/ClickHouseDataSourceProcessor.java       | 15 ++++---
 .../dameng/param/DamengDataSourceProcessor.java    | 14 +++---
 .../param/DatabendDataSourceProcessor.java         | 15 ++++---
 .../db2/param/Db2DataSourceProcessor.java          | 14 +++---
 .../param/DolphinDBDataSourceProcessor.java        | 15 ++++---
 .../doris/param/DorisDataSourceProcessor.java      | 15 ++++---
 .../hana/param/HanaDataSourceProcessor.java        | 17 ++++---
 .../hive/param/HiveDataSourceProcessor.java        | 20 ++++++---
 .../k8s/param/K8sDataSourceProcessor.java          |  4 +-
 .../kyuubi/param/KyuubiDataSourceProcessor.java    | 15 ++++---
 .../mysql/param/MySQLDataSourceProcessor.java      | 22 ++++-----
 .../param/OceanBaseDataSourceProcessor.java        | 14 +++---
 .../oracle/param/OracleDataSourceProcessor.java    | 14 +++---
 .../param/PostgreSQLDataSourceProcessor.java       | 15 ++++---
 .../presto/param/PrestoDataSourceProcessor.java    | 14 +++---
 .../redshift/RedshiftPooledDataSourceClient.java   |  2 +-
 .../param/RedshiftDataSourceProcessor.java         | 34 +++++++-------
 .../param/SnowflakeDatasourceProcessor.java        | 15 ++++---
 .../spark/param/SparkDataSourceProcessor.java      | 20 ++++++---
 .../param/SQLServerDataSourceProcessor.java        | 14 +++---
 .../param/StarRocksDataSourceProcessor.java        | 13 ++++--
 .../trino/param/TrinoDataSourceProcessor.java      | 14 +++---
 .../vertica/param/VerticaDataSourceProcessor.java  | 15 ++++---
 28 files changed, 311 insertions(+), 153 deletions(-)

diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/DataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/DataSourceProcessor.java
index 5a2338a3a5..2ddef9f240 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/DataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/DataSourceProcessor.java
@@ -51,7 +51,7 @@ public interface DataSourceProcessor {
     /**
      * create BaseDataSourceParamDTO by connectionJson
      *
-     * @param connectionJson see{@link 
org.apache.dolphinscheduler.dao.entity.Datasource}
+     * @param connectionJson see{@link 
org.apache.dolphinscheduler.dao.entity.DataSource}
      * @return {@link BaseDataSourceParamDTO}
      */
     BaseDataSourceParamDTO createDatasourceParamDTO(String connectionJson);
@@ -67,7 +67,7 @@ public interface DataSourceProcessor {
      * deserialize json to datasource connection param
      *
      * @param connectionJson {@code 
org.apache.dolphinscheduler.dao.entity.DataSource.connectionParams}
-     * @return {@link BaseConnectionParam}
+     * @return {@link ConnectionParam}
      */
     ConnectionParam createConnectionParams(String connectionJson);
 
@@ -96,7 +96,7 @@ public interface DataSourceProcessor {
      * @return {@link Connection}
      */
     // todo: Change to return a ConnectionWrapper
-    Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException, IOException;
+    Connection getConnection(ConnectionParam connectionParam) throws 
SQLException, IOException;
 
     /**
      * test connection
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/JdbcConnectionProvider.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/JdbcConnectionProvider.java
new file mode 100644
index 0000000000..0d16156521
--- /dev/null
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/JdbcConnectionProvider.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.datasource.api.datasource;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public interface JdbcConnectionProvider {
+
+    Connection getConnection() throws SQLException;
+
+}
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/JdbcDriverConnectionProvider.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/JdbcDriverConnectionProvider.java
new file mode 100644
index 0000000000..a883a6dcdd
--- /dev/null
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/JdbcDriverConnectionProvider.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.datasource.api.datasource;
+
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import lombok.Builder;
+
+@Builder
+public class JdbcDriverConnectionProvider implements JdbcConnectionProvider {
+
+    private final String jdbcDriverClassName;
+    private final String jdbcUrl;
+    private final String username;
+    private final String password;
+    private final Properties properties;
+
+    @Override
+    public Connection getConnection() throws SQLException {
+        try {
+            Driver driver = (Driver) 
Class.forName(jdbcDriverClassName).getDeclaredConstructor().newInstance();
+            Properties p = new Properties(properties);
+            if (username != null) {
+                p.setProperty("user", username);
+            }
+            if (password != null) {
+                p.setProperty("password", password);
+            }
+            return driver.connect(jdbcUrl, p);
+        } catch (ReflectiveOperationException e) {
+            throw new SQLException("Failed to instantiate driver: " + 
jdbcDriverClassName, e);
+        }
+    }
+}
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-athena/src/main/java/org/apache/dolphinscheduler/plugin/datasource/athena/param/AthenaDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-athena/src/main/java/org/apache/dolphinscheduler/plugin/datasource/athena/param/AthenaDataSourceProcessor.java
index 13f128bc19..4fd988c6be 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-athena/src/main/java/org/apache/dolphinscheduler/plugin/datasource/athena/param/AthenaDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-athena/src/main/java/org/apache/dolphinscheduler/plugin/datasource/athena/param/AthenaDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -106,11 +106,15 @@ public class AthenaDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         AthenaConnectionParam athenaConnectionParam = (AthenaConnectionParam) 
connectionParam;
-        Class.forName(this.getDatasourceDriver());
-        return DriverManager.getConnection(this.getJdbcUrl(connectionParam),
-                athenaConnectionParam.getUser(), 
PasswordUtils.decodePassword(athenaConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(athenaConnectionParam))
+                .username(athenaConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(athenaConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-azure-sql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/azuresql/param/AzureSQLDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-azure-sql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/azuresql/param/AzureSQLDataSourceProcessor.java
index 10f7d32ad5..244f5da7d0 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-azure-sql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/azuresql/param/AzureSQLDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-azure-sql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/azuresql/param/AzureSQLDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -33,7 +34,6 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.net.MalformedURLException;
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -147,16 +147,20 @@ public class AzureSQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         AzureSQLConnectionParam azureSQLConnectionParam = 
(AzureSQLConnectionParam) connectionParam;
         // token access way
         if 
(azureSQLConnectionParam.getMode().equals(AzureSQLAuthMode.ACCESSTOKEN)) {
             return tokenGetConnection(azureSQLConnectionParam);
         }
         // normal way
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), 
azureSQLConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(azureSQLConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(azureSQLConnectionParam))
+                .username(azureSQLConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(azureSQLConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
@@ -255,6 +259,7 @@ public class AzureSQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
 
     /**
      * by default, add {"trustServerCertificate":true} to other to deal with 
SSL trust issue
+     *
      * @param paramDTO
      */
     private void checkTrustServerCertificate(BaseDataSourceParamDTO paramDTO) {
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-clickhouse/src/main/java/org/apache/dolphinscheduler/plugin/datasource/clickhouse/param/ClickHouseDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-clickhouse/src/main/java/org/apache/dolphinscheduler/plugin/datasource/clickhouse/param/ClickHouseDataSourceProcessor.java
index 8f5959d252..8b4cde8042 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-clickhouse/src/main/java/org/apache/dolphinscheduler/plugin/datasource/clickhouse/param/ClickHouseDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-clickhouse/src/main/java/org/apache/dolphinscheduler/plugin/datasource/clickhouse/param/ClickHouseDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
 import org.apache.dolphinscheduler.spi.enums.DbType;
@@ -30,7 +31,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -109,12 +109,15 @@ public class ClickHouseDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         ClickHouseConnectionParam clickhouseConnectionParam = 
(ClickHouseConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        return 
DriverManager.getConnection(getJdbcUrl(clickhouseConnectionParam),
-                clickhouseConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(clickhouseConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(clickhouseConnectionParam))
+                .username(clickhouseConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(clickhouseConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dameng/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dameng/param/DamengDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dameng/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dameng/param/DamengDataSourceProcessor.java
index b7d002abd1..70632f2846 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dameng/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dameng/param/DamengDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dameng/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dameng/param/DamengDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -32,7 +33,6 @@ import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -116,11 +116,15 @@ public class DamengDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         DamengConnectionParam damengConnectionParam = (DamengConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(damengConnectionParam), 
damengConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(damengConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(damengConnectionParam))
+                .username(damengConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(damengConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-databend/src/main/java/org/apache/dolphinscheduler/plugin/datasource/databend/param/DatabendDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-databend/src/main/java/org/apache/dolphinscheduler/plugin/datasource/databend/param/DatabendDataSourceProcessor.java
index c2917404ca..4dd9787813 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-databend/src/main/java/org/apache/dolphinscheduler/plugin/datasource/databend/param/DatabendDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-databend/src/main/java/org/apache/dolphinscheduler/plugin/datasource/databend/param/DatabendDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
 import org.apache.dolphinscheduler.spi.enums.DbType;
@@ -30,7 +31,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -108,12 +108,15 @@ public class DatabendDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         DatabendConnectionParam databendConnectionParam = 
(DatabendConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(databendConnectionParam),
-                databendConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(databendConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(databendConnectionParam))
+                .username(databendConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(databendConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-db2/src/main/java/org/apache/dolphinscheduler/plugin/datasource/db2/param/Db2DataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-db2/src/main/java/org/apache/dolphinscheduler/plugin/datasource/db2/param/Db2DataSourceProcessor.java
index d9aad8ce55..ecf64b90e2 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-db2/src/main/java/org/apache/dolphinscheduler/plugin/datasource/db2/param/Db2DataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-db2/src/main/java/org/apache/dolphinscheduler/plugin/datasource/db2/param/Db2DataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -105,11 +105,15 @@ public class Db2DataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         Db2ConnectionParam db2ConnectionParam = (Db2ConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(db2ConnectionParam),
-                db2ConnectionParam.getUser(), 
PasswordUtils.decodePassword(db2ConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(db2ConnectionParam))
+                .username(db2ConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(db2ConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java
index ba6582f5c8..8284bbe749 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java
@@ -23,6 +23,7 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
 import org.apache.dolphinscheduler.spi.enums.DbType;
@@ -30,7 +31,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -118,12 +118,15 @@ public class DolphinDBDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         DolphinDBConnectionParam dolphinDBConnectionParam = 
(DolphinDBConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                dolphinDBConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(dolphinDBConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(dolphinDBConnectionParam))
+                .username(dolphinDBConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(dolphinDBConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-doris/src/main/java/org/apache/dolphinscheduler/plugin/doris/param/DorisDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-doris/src/main/java/org/apache/dolphinscheduler/plugin/doris/param/DorisDataSourceProcessor.java
index d948d8876b..2fca856e88 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-doris/src/main/java/org/apache/dolphinscheduler/plugin/doris/param/DorisDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-doris/src/main/java/org/apache/dolphinscheduler/plugin/doris/param/DorisDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
 import org.apache.dolphinscheduler.spi.enums.DbType;
@@ -30,7 +31,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -122,12 +122,15 @@ public class DorisDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         DorisConnectionParam dorisConnectionParam = (DorisConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), 
dorisConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(dorisConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(dorisConnectionParam))
+                .username(dorisConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(dorisConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hana/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hana/param/HanaDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hana/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hana/param/HanaDataSourceProcessor.java
index 41eadaef9f..33b96372b8 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hana/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hana/param/HanaDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hana/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hana/param/HanaDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 
 import com.google.auto.service.AutoService;
@@ -107,12 +107,15 @@ public class HanaDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
-        HanaConnectionParam mysqlConnectionParam = (HanaConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        String user = mysqlConnectionParam.getUser();
-        String password = 
PasswordUtils.decodePassword(mysqlConnectionParam.getPassword());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), user, 
password);
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
+        HanaConnectionParam hanaConnectionParam = (HanaConnectionParam) 
connectionParam;
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(hanaConnectionParam))
+                .username(hanaConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(hanaConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/param/HiveDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/param/HiveDataSourceProcessor.java
index 2838b9983e..4c1ff989aa 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/param/HiveDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/param/HiveDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.CommonUtils;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
@@ -34,7 +35,6 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.io.IOException;
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -138,13 +138,19 @@ public class HiveDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
IOException, ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
IOException, SQLException {
         HiveConnectionParam hiveConnectionParam = (HiveConnectionParam) 
connectionParam;
-        
CommonUtils.loadKerberosConf(hiveConnectionParam.getJavaSecurityKrb5Conf(),
-                hiveConnectionParam.getLoginUserKeytabUsername(), 
hiveConnectionParam.getLoginUserKeytabPath());
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                hiveConnectionParam.getUser(), 
PasswordUtils.decodePassword(hiveConnectionParam.getPassword()));
+        CommonUtils.loadKerberosConf(
+                hiveConnectionParam.getJavaSecurityKrb5Conf(),
+                hiveConnectionParam.getLoginUserKeytabUsername(),
+                hiveConnectionParam.getLoginUserKeytabPath());
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(hiveConnectionParam))
+                .username(hiveConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(hiveConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-k8s/src/main/java/org/apache/dolphinscheduler/plugin/datasource/k8s/param/K8sDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-k8s/src/main/java/org/apache/dolphinscheduler/plugin/datasource/k8s/param/K8sDataSourceProcessor.java
index fd3b49469f..39078d1862 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-k8s/src/main/java/org/apache/dolphinscheduler/plugin/datasource/k8s/param/K8sDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-k8s/src/main/java/org/apache/dolphinscheduler/plugin/datasource/k8s/param/K8sDataSourceProcessor.java
@@ -28,9 +28,7 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 
 import org.apache.commons.lang3.StringUtils;
 
-import java.io.IOException;
 import java.sql.Connection;
-import java.sql.SQLException;
 import java.text.MessageFormat;
 
 import lombok.extern.slf4j.Slf4j;
@@ -101,7 +99,7 @@ public class K8sDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException, IOException {
+    public Connection getConnection(ConnectionParam connectionParam) {
         return null;
     }
 
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-kyuubi/src/main/java/org/apache/dolphinscheduler/plugin/datasource/kyuubi/param/KyuubiDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-kyuubi/src/main/java/org/apache/dolphinscheduler/plugin/datasource/kyuubi/param/KyuubiDataSourceProcessor.java
index b4565804df..bbee215f42 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-kyuubi/src/main/java/org/apache/dolphinscheduler/plugin/datasource/kyuubi/param/KyuubiDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-kyuubi/src/main/java/org/apache/dolphinscheduler/plugin/datasource/kyuubi/param/KyuubiDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -118,12 +118,15 @@ public class KyuubiDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         KyuubiConnectionParam kyuubiConnectionParam = (KyuubiConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        // todo:
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                kyuubiConnectionParam.getUser(), 
PasswordUtils.decodePassword(kyuubiConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(kyuubiConnectionParam))
+                .username(kyuubiConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(kyuubiConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
index fe06873901..efd3a9b58c 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-mysql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/mysql/param/MySQLDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -124,9 +124,8 @@ public class MySQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         MySQLConnectionParam mysqlConnectionParam = (MySQLConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
         String user = mysqlConnectionParam.getUser();
         if (user.contains(AUTO_DESERIALIZE)) {
             log.warn("sensitive param : {} in username field is filtered", 
AUTO_DESERIALIZE);
@@ -137,17 +136,18 @@ public class MySQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
             log.warn("sensitive param : {} in password field is filtered", 
AUTO_DESERIALIZE);
             password = password.replace(AUTO_DESERIALIZE, "");
         }
-
-        Properties connectionProperties = 
getConnectionProperties(mysqlConnectionParam, user, password);
-
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), 
connectionProperties);
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(mysqlConnectionParam))
+                .username(user)
+                .password(PasswordUtils.decodePassword(password))
+                .properties(getConnectionProperties(mysqlConnectionParam))
+                .build()
+                .getConnection();
     }
 
-    private Properties getConnectionProperties(MySQLConnectionParam 
mysqlConnectionParam, String user,
-                                               String password) {
+    private Properties getConnectionProperties(MySQLConnectionParam 
mysqlConnectionParam) {
         Properties connectionProperties = new Properties();
-        connectionProperties.put("user", user);
-        connectionProperties.put("password", password);
         Map<String, String> paramMap = mysqlConnectionParam.getOther();
         if (MapUtils.isNotEmpty(paramMap)) {
             paramMap.forEach((k, v) -> {
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java
index 8dda78af5d..8b0b0d122f 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java
@@ -23,15 +23,14 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
 import org.apache.dolphinscheduler.spi.enums.DbType;
 
 import org.apache.commons.collections4.MapUtils;
 
-import java.io.IOException;
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -164,9 +163,8 @@ public class OceanBaseDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException, IOException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         OceanBaseConnectionParam obConnectionParam = 
(OceanBaseConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
         String user = obConnectionParam.getUser();
         if (user.contains(AUTO_DESERIALIZE)) {
             log.warn("sensitive param : {} in username field is filtered", 
AUTO_DESERIALIZE);
@@ -177,7 +175,13 @@ public class OceanBaseDataSourceProcessor extends 
AbstractDataSourceProcessor {
             log.warn("sensitive param : {} in password field is filtered", 
AUTO_DESERIALIZE);
             password = password.replace(AUTO_DESERIALIZE, "");
         }
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), user, 
password);
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(obConnectionParam))
+                .username(user)
+                .password(PasswordUtils.decodePassword(password))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
index 106ea46a20..75ae36bf20 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -32,7 +33,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -129,11 +129,15 @@ public class OracleDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         OracleConnectionParam oracleConnectionParam = (OracleConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                oracleConnectionParam.getUser(), 
PasswordUtils.decodePassword(oracleConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(oracleConnectionParam))
+                .username(oracleConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(oracleConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-postgresql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/postgresql/param/PostgreSQLDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-postgresql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/postgresql/param/PostgreSQLDataSourceProcessor.java
index b19ce008f0..cd48ee06ed 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-postgresql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/postgresql/param/PostgreSQLDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-postgresql/src/main/java/org/apache/dolphinscheduler/plugin/datasource/postgresql/param/PostgreSQLDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -111,12 +111,15 @@ public class PostgreSQLDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         PostgreSQLConnectionParam postgreSqlConnectionParam = 
(PostgreSQLConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        return 
DriverManager.getConnection(getJdbcUrl(postgreSqlConnectionParam),
-                postgreSqlConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(postgreSqlConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(postgreSqlConnectionParam))
+                .username(postgreSqlConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(postgreSqlConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-presto/src/main/java/org/apache/dolphinscheduler/plugin/datasource/presto/param/PrestoDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-presto/src/main/java/org/apache/dolphinscheduler/plugin/datasource/presto/param/PrestoDataSourceProcessor.java
index b5dc8fd09c..46bdc8104a 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-presto/src/main/java/org/apache/dolphinscheduler/plugin/datasource/presto/param/PrestoDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-presto/src/main/java/org/apache/dolphinscheduler/plugin/datasource/presto/param/PrestoDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -110,11 +110,15 @@ public class PrestoDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         PrestoConnectionParam prestoConnectionParam = (PrestoConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                prestoConnectionParam.getUser(), 
PasswordUtils.decodePassword(prestoConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(prestoConnectionParam))
+                .username(prestoConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(prestoConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftPooledDataSourceClient.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftPooledDataSourceClient.java
index 2119217a47..7dc0fbb8a1 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftPooledDataSourceClient.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftPooledDataSourceClient.java
@@ -42,7 +42,7 @@ public class RedshiftPooledDataSourceClient extends 
BasePooledDataSourceClient {
         if (connectionParam.getMode().equals(RedshiftAuthMode.PASSWORD)) {
             return super.getConnection();
         }
-        return RedshiftDataSourceProcessor.getConnectionByIAM(connectionParam);
+        return new 
RedshiftDataSourceProcessor().getConnection(connectionParam);
     }
 
 }
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java
index 6535ac45d7..cdb167f8dc 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -32,7 +33,6 @@ import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -129,17 +129,20 @@ public class RedshiftDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         RedshiftConnectionParam redshiftConnectionParam = 
(RedshiftConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
         if 
(redshiftConnectionParam.getMode().equals(RedshiftAuthMode.PASSWORD)) {
-            return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                    redshiftConnectionParam.getUser(),
-                    
PasswordUtils.decodePassword(redshiftConnectionParam.getPassword()));
+            return JdbcDriverConnectionProvider.builder()
+                    .jdbcDriverClassName(getDatasourceDriver())
+                    .jdbcUrl(getJdbcUrl(redshiftConnectionParam))
+                    .username(redshiftConnectionParam.getUser())
+                    
.password(PasswordUtils.decodePassword(redshiftConnectionParam.getPassword()))
+                    .build()
+                    .getConnection();
         } else if 
(redshiftConnectionParam.getMode().equals(RedshiftAuthMode.IAM_ACCESS_KEY)) {
             return getConnectionByIAM(redshiftConnectionParam);
         }
-        return null;
+        throw new SQLException("Unsupported authentication mode: " + 
redshiftConnectionParam.getMode());
     }
 
     @Override
@@ -179,7 +182,7 @@ public class RedshiftDataSourceProcessor extends 
AbstractDataSourceProcessor {
         return null;
     }
 
-    private static String transformOther(Map<String, String> otherMap) {
+    private String transformOther(Map<String, String> otherMap) {
         if (MapUtils.isNotEmpty(otherMap)) {
             List<String> list = new ArrayList<>(otherMap.size());
             otherMap.forEach((key, value) -> list.add(String.format("%s=%s", 
key, value)));
@@ -198,7 +201,7 @@ public class RedshiftDataSourceProcessor extends 
AbstractDataSourceProcessor {
      * @param redshiftConnectionParam
      * @return
      */
-    public static Connection getConnectionByIAM(RedshiftConnectionParam 
redshiftConnectionParam) {
+    private Connection getConnectionByIAM(RedshiftConnectionParam 
redshiftConnectionParam) throws SQLException {
         String basic;
         String authParams = 
String.format("AccessKeyID=%s&SecretAccessKey=%s&DbUser=%s",
                 redshiftConnectionParam.getUser(), 
PasswordUtils.decodePassword(redshiftConnectionParam.getPassword()),
@@ -217,13 +220,10 @@ public class RedshiftDataSourceProcessor extends 
AbstractDataSourceProcessor {
             // append AccessKeyID &SecretAccessKey &DbUser
             connectionUrl = String.format("%s?%s", basic, authParams);
         }
-        try {
-            Class.forName(DataSourceConstants.COM_REDSHIFT_JDBC_DRIVER);
-            return DriverManager.getConnection(connectionUrl);
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException(e);
-        }
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(connectionUrl)
+                .build()
+                .getConnection();
     }
 }
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-snowflake/src/main/java/org/apache/dolphinscheduler/plugin/datasource/snowflake/param/SnowflakeDatasourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-snowflake/src/main/java/org/apache/dolphinscheduler/plugin/datasource/snowflake/param/SnowflakeDatasourceProcessor.java
index 764bc8e345..44480bb1f0 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-snowflake/src/main/java/org/apache/dolphinscheduler/plugin/datasource/snowflake/param/SnowflakeDatasourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-snowflake/src/main/java/org/apache/dolphinscheduler/plugin/datasource/snowflake/param/SnowflakeDatasourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 
 import lombok.extern.slf4j.Slf4j;
@@ -114,12 +114,15 @@ public class SnowflakeDatasourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         SnowflakeConnectionParam snowFlakeConnectionParam = 
(SnowflakeConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                snowFlakeConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(snowFlakeConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(snowFlakeConnectionParam))
+                .username(snowFlakeConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(snowFlakeConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
     @Override
     public DataSourceProcessor create() {
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-spark/src/main/java/org/apache/dolphinscheduler/plugin/datasource/spark/param/SparkDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-spark/src/main/java/org/apache/dolphinscheduler/plugin/datasource/spark/param/SparkDataSourceProcessor.java
index b603b7d2e0..da64c58374 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-spark/src/main/java/org/apache/dolphinscheduler/plugin/datasource/spark/param/SparkDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-spark/src/main/java/org/apache/dolphinscheduler/plugin/datasource/spark/param/SparkDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.CommonUtils;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
@@ -34,7 +35,6 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.io.IOException;
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.List;
@@ -140,13 +140,19 @@ public class SparkDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
IOException, ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
IOException, SQLException {
         SparkConnectionParam sparkConnectionParam = (SparkConnectionParam) 
connectionParam;
-        
CommonUtils.loadKerberosConf(sparkConnectionParam.getJavaSecurityKrb5Conf(),
-                sparkConnectionParam.getLoginUserKeytabUsername(), 
sparkConnectionParam.getLoginUserKeytabPath());
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(sparkConnectionParam),
-                sparkConnectionParam.getUser(), 
PasswordUtils.decodePassword(sparkConnectionParam.getPassword()));
+        CommonUtils.loadKerberosConf(
+                sparkConnectionParam.getJavaSecurityKrb5Conf(),
+                sparkConnectionParam.getLoginUserKeytabUsername(),
+                sparkConnectionParam.getLoginUserKeytabPath());
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(sparkConnectionParam))
+                .username(sparkConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(sparkConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
index bc34a309b1..46a1f8b33e 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.List;
 import java.util.Map;
@@ -110,11 +110,15 @@ public class SQLServerDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         SQLServerConnectionParam sqlServerConnectionParam = 
(SQLServerConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), 
sqlServerConnectionParam.getUser(),
-                
PasswordUtils.decodePassword(sqlServerConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(sqlServerConnectionParam))
+                .username(sqlServerConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(sqlServerConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-starrocks/src/main/java/org/apache/dolphinscheduler/plugin/datasource/starrocks/param/StarRocksDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-starrocks/src/main/java/org/apache/dolphinscheduler/plugin/datasource/starrocks/param/StarRocksDataSourceProcessor.java
index bab10b59ea..e820fcba6d 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-starrocks/src/main/java/org/apache/dolphinscheduler/plugin/datasource/starrocks/param/StarRocksDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-starrocks/src/main/java/org/apache/dolphinscheduler/plugin/datasource/starrocks/param/StarRocksDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -127,9 +127,8 @@ public class StarRocksDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         StarRocksConnectionParam starRocksConnectionParam = 
(StarRocksConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
         String user = starRocksConnectionParam.getUser();
         if (user.contains(AUTO_DESERIALIZE)) {
             log.warn("sensitive param : {} in username field is filtered", 
AUTO_DESERIALIZE);
@@ -140,7 +139,13 @@ public class StarRocksDataSourceProcessor extends 
AbstractDataSourceProcessor {
             log.warn("sensitive param : {} in password field is filtered", 
AUTO_DESERIALIZE);
             password = password.replace(AUTO_DESERIALIZE, "");
         }
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), user, 
password);
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(starRocksConnectionParam))
+                .username(user)
+                .password(PasswordUtils.decodePassword(password))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-trino/src/main/java/org/apache/dolphinscheduler/plugin/datasource/trino/param/TrinoDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-trino/src/main/java/org/apache/dolphinscheduler/plugin/datasource/trino/param/TrinoDataSourceProcessor.java
index e7177c6b95..4e280ad3cf 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-trino/src/main/java/org/apache/dolphinscheduler/plugin/datasource/trino/param/TrinoDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-trino/src/main/java/org/apache/dolphinscheduler/plugin/datasource/trino/param/TrinoDataSourceProcessor.java
@@ -23,6 +23,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -31,7 +32,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -112,11 +112,15 @@ public class TrinoDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         TrinoConnectionParam TrinoConnectionParam = (TrinoConnectionParam) 
connectionParam;
-        Class.forName(getDatasourceDriver());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam),
-                TrinoConnectionParam.getUser(), 
PasswordUtils.decodePassword(TrinoConnectionParam.getPassword()));
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(TrinoConnectionParam))
+                .username(TrinoConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(TrinoConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override
diff --git 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java
 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java
index e811eaea17..49e5d1e07f 100644
--- 
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java
+++ 
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java
@@ -22,6 +22,7 @@ import 
org.apache.dolphinscheduler.plugin.datasource.api.constants.DataSourceCon
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO;
 import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor;
+import 
org.apache.dolphinscheduler.plugin.datasource.api.datasource.JdbcDriverConnectionProvider;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
 import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam;
 import org.apache.dolphinscheduler.spi.datasource.ConnectionParam;
@@ -30,7 +31,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType;
 import org.apache.commons.collections4.MapUtils;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.Map;
 
@@ -104,12 +104,15 @@ public class VerticaDataSourceProcessor extends 
AbstractDataSourceProcessor {
     }
 
     @Override
-    public Connection getConnection(ConnectionParam connectionParam) throws 
ClassNotFoundException, SQLException {
+    public Connection getConnection(ConnectionParam connectionParam) throws 
SQLException {
         VerticaConnectionParam verticaConnectionParam = 
(VerticaConnectionParam) connectionParam;
-        Class.forName(getDatasourceDriver());
-        String user = verticaConnectionParam.getUser();
-        String password = 
PasswordUtils.decodePassword(verticaConnectionParam.getPassword());
-        return DriverManager.getConnection(getJdbcUrl(connectionParam), user, 
password);
+        return JdbcDriverConnectionProvider.builder()
+                .jdbcDriverClassName(getDatasourceDriver())
+                .jdbcUrl(getJdbcUrl(verticaConnectionParam))
+                .username(verticaConnectionParam.getUser())
+                
.password(PasswordUtils.decodePassword(verticaConnectionParam.getPassword()))
+                .build()
+                .getConnection();
     }
 
     @Override

Reply via email to