From 4dd0b15da7cfb109157f843c36282161a8fa5653 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 13 May 2024 17:32:49 +0800 Subject: [PATCH] fix bug --- .../hutool/db/ds/AbstractDSFactory.java | 46 +++++++++++++++++++ .../hutool/db/ds/bee/BeeDSFactory.java | 12 +++-- .../hutool/db/ds/c3p0/C3p0DSFactory.java | 15 +++--- .../hutool/db/ds/dbcp/DbcpDSFactory.java | 12 +++-- .../hutool/db/ds/druid/DruidDSFactory.java | 14 +++--- .../hutool/db/ds/hikari/HikariDSFactory.java | 14 +++--- .../hutool/db/ds/tomcat/TomcatDSFactory.java | 14 +++--- 7 files changed, 93 insertions(+), 34 deletions(-) create mode 100644 hutool-db/src/main/java/org/dromara/hutool/db/ds/AbstractDSFactory.java diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/AbstractDSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/AbstractDSFactory.java new file mode 100644 index 000000000..2d60d9edb --- /dev/null +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/AbstractDSFactory.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2024. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.db.ds; + +import org.dromara.hutool.core.lang.Assert; + +import javax.sql.DataSource; + +/** + * 抽象数据源工厂 + * + * @author looly + */ +public abstract class AbstractDSFactory implements DSFactory { + private static final long serialVersionUID = 1L; + + private final String dataSourceName; + + /** + * 构造 + * + * @param dataSourceClass 数据库连接池实现类,用于检测所提供的DataSource类是否存在,当传入的DataSource类不存在时抛出ClassNotFoundException
+ * 此参数的作用是在detectDSFactory方法自动检测所用连接池时,如果实现类不存在,调用此方法会自动抛出异常,从而切换到下一种连接池的检测。 + * @param dataSourceName 数据源名称 + */ + public AbstractDSFactory(final Class dataSourceClass, final String dataSourceName) { + //此参数的作用是在detectDSFactory方法自动检测所用连接池时,如果实现类不存在,调用此方法会自动抛出异常,从而切换到下一种连接池的检测。 + Assert.notNull(dataSourceClass); + this.dataSourceName = dataSourceName; + } + + @Override + public String getDataSourceName() { + return this.dataSourceName; + } +} diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/bee/BeeDSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/bee/BeeDSFactory.java index dea0b8c39..38310997d 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/bee/BeeDSFactory.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/bee/BeeDSFactory.java @@ -14,7 +14,7 @@ package org.dromara.hutool.db.ds.bee; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.db.config.ConnectionConfig; -import org.dromara.hutool.db.ds.DSFactory; +import org.dromara.hutool.db.ds.AbstractDSFactory; import org.dromara.hutool.setting.props.Props; import org.stone.beecp.BeeDataSource; import org.stone.beecp.BeeDataSourceConfig; @@ -27,12 +27,14 @@ import java.util.Properties; * * @author Looly */ -public class BeeDSFactory implements DSFactory { +public class BeeDSFactory extends AbstractDSFactory { private static final long serialVersionUID = 1L; - @Override - public String getDataSourceName() { - return "BeeCP"; + /** + * 构造 + */ + public BeeDSFactory() { + super(BeeDataSource.class, "BeeCP"); } @Override diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/c3p0/C3p0DSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/c3p0/C3p0DSFactory.java index 93b7f829a..d2507f5f0 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/c3p0/C3p0DSFactory.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/c3p0/C3p0DSFactory.java @@ -16,7 +16,7 @@ import com.mchange.v2.c3p0.ComboPooledDataSource; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.db.DbException; import org.dromara.hutool.db.config.ConnectionConfig; -import org.dromara.hutool.db.ds.DSFactory; +import org.dromara.hutool.db.ds.AbstractDSFactory; import org.dromara.hutool.setting.props.Props; import javax.sql.DataSource; @@ -29,14 +29,17 @@ import java.util.Properties; * @author Looly * */ -public class C3p0DSFactory implements DSFactory { - private static final long serialVersionUID = -6090788225842047281L; +public class C3p0DSFactory extends AbstractDSFactory { + private static final long serialVersionUID = 1L; - @Override - public String getDataSourceName() { - return "C3P0"; + /** + * 构造 + */ + public C3p0DSFactory() { + super(ComboPooledDataSource.class, "C3P0"); } + @Override public DataSource createDataSource(final ConnectionConfig config) { final ComboPooledDataSource ds = new ComboPooledDataSource(); diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/dbcp/DbcpDSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/dbcp/DbcpDSFactory.java index 332db0934..c6c68c890 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/dbcp/DbcpDSFactory.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/dbcp/DbcpDSFactory.java @@ -15,7 +15,7 @@ package org.dromara.hutool.db.ds.dbcp; import org.apache.commons.dbcp2.BasicDataSource; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.db.config.ConnectionConfig; -import org.dromara.hutool.db.ds.DSFactory; +import org.dromara.hutool.db.ds.AbstractDSFactory; import org.dromara.hutool.setting.props.Props; import javax.sql.DataSource; @@ -27,12 +27,14 @@ import java.util.Properties; * @author Looly * */ -public class DbcpDSFactory implements DSFactory { +public class DbcpDSFactory extends AbstractDSFactory { private static final long serialVersionUID = 1L; - @Override - public String getDataSourceName() { - return "commons-dbcp2"; + /** + * 构造 + */ + public DbcpDSFactory() { + super(BasicDataSource.class, "commons-dbcp2"); } @Override diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/druid/DruidDSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/druid/DruidDSFactory.java index 84a92cc48..fb0f6c7d8 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/druid/DruidDSFactory.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/druid/DruidDSFactory.java @@ -16,7 +16,7 @@ import com.alibaba.druid.pool.DruidDataSource; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.db.config.ConnectionConfig; -import org.dromara.hutool.db.ds.DSFactory; +import org.dromara.hutool.db.ds.AbstractDSFactory; import org.dromara.hutool.setting.props.Props; import javax.sql.DataSource; @@ -28,12 +28,14 @@ import java.util.Properties; * @author Looly * */ -public class DruidDSFactory implements DSFactory { - private static final long serialVersionUID = 4680621702534433222L; +public class DruidDSFactory extends AbstractDSFactory { + private static final long serialVersionUID = 1L; - @Override - public String getDataSourceName() { - return "Druid"; + /** + * 构造 + */ + public DruidDSFactory() { + super(DruidDataSource.class, "Druid"); } @Override diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/hikari/HikariDSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/hikari/HikariDSFactory.java index 8111aca66..7bfdd1a9b 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/hikari/HikariDSFactory.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/hikari/HikariDSFactory.java @@ -16,7 +16,7 @@ import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.db.config.ConnectionConfig; -import org.dromara.hutool.db.ds.DSFactory; +import org.dromara.hutool.db.ds.AbstractDSFactory; import org.dromara.hutool.setting.props.Props; import javax.sql.DataSource; @@ -28,12 +28,14 @@ import java.util.Properties; * @author Looly * */ -public class HikariDSFactory implements DSFactory { - private static final long serialVersionUID = -8834744983614749401L; +public class HikariDSFactory extends AbstractDSFactory { + private static final long serialVersionUID = 1L; - @Override - public String getDataSourceName() { - return "HikariCP"; + /** + * 构造 + */ + public HikariDSFactory() { + super(HikariDataSource.class, "HikariCP"); } @Override diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/tomcat/TomcatDSFactory.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/tomcat/TomcatDSFactory.java index 5ee0b1892..091f22cc4 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/tomcat/TomcatDSFactory.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/tomcat/TomcatDSFactory.java @@ -16,7 +16,7 @@ import org.apache.tomcat.jdbc.pool.DataSource; import org.apache.tomcat.jdbc.pool.PoolProperties; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.db.config.ConnectionConfig; -import org.dromara.hutool.db.ds.DSFactory; +import org.dromara.hutool.db.ds.AbstractDSFactory; import org.dromara.hutool.setting.props.Props; import java.util.Properties; @@ -26,12 +26,14 @@ import java.util.Properties; * * @author Looly */ -public class TomcatDSFactory implements DSFactory { - private static final long serialVersionUID = 4925514193275150156L; +public class TomcatDSFactory extends AbstractDSFactory { + private static final long serialVersionUID = 1L; - @Override - public String getDataSourceName() { - return "Tomcat-Jdbc-Pool"; + /** + * 构造 + */ + public TomcatDSFactory() { + super(DataSource.class, "Tomcat-Jdbc-Pool"); } @Override