diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverUtil.java b/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverUtil.java index 2ee39ebc8..3fc977ee5 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverUtil.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverUtil.java @@ -13,14 +13,14 @@ package org.dromara.hutool.db.driver; import org.dromara.hutool.core.io.IoUtil; +import org.dromara.hutool.core.reflect.ClassUtil; +import org.dromara.hutool.core.reflect.ConstructorUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.db.DbException; import org.dromara.hutool.db.ds.DSWrapper; import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.SQLException; +import java.sql.*; /** * 驱动相关工具类,包括自动获取驱动类名 @@ -29,6 +29,31 @@ import java.sql.SQLException; * @since 4.0.10 */ public class DriverUtil { + + /** + * 创建驱动 + * + * @param driverName 驱动类名 + * @return 驱动 + * @since 6.0.0 + */ + public static Driver createDriver(final String driverName) { + return createDriver(driverName, null); + } + + /** + * 创建驱动 + * + * @param driverName 驱动类名 + * @param classLoader 类加载器 + * @return 驱动 + * @since 6.0.0 + */ + public static Driver createDriver(final String driverName, final ClassLoader classLoader) { + final Class driverClass = ClassUtil.forName(driverName, true, classLoader); + return (Driver) ConstructorUtil.newInstance(driverClass); + } + /** * 通过JDBC URL等信息识别JDBC驱动名 * diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/PooledConnection.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/PooledConnection.java index a555091fd..4c5f8d602 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/PooledConnection.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/PooledConnection.java @@ -48,7 +48,7 @@ public class PooledConnection extends ConnectionWrapper implements Poolable connPool; @@ -47,6 +51,10 @@ public class PooledDataSource extends AbstractDataSource { */ public PooledDataSource(final ConnectionConfig config) { + final String driverName = config.getDriver(); + if (StrUtil.isNotBlank(driverName)) { + this.driver = DriverUtil.createDriver(driverName); + } final Props poolProps = Props.of(config.getPoolProps()); this.maxWait = poolProps.getInt(KEY_MAX_WAIT, 6000); @@ -59,6 +67,17 @@ public class PooledDataSource extends AbstractDataSource { this.connPool = new PartitionObjectPool<>(poolConfig, createConnFactory(config)); } + /** + * 设置驱动 + * + * @param driver 驱动 + * @return this + */ + public PooledDataSource setDriver(final Driver driver) { + this.driver = driver; + return this; + } + @Override public Connection getConnection() throws SQLException { return (Connection) connPool.borrowObject();