From 2a123d7b95ccf87e6f56f7f65fa606d552794f45 Mon Sep 17 00:00:00 2001 From: NekokeCore Date: Wed, 13 Apr 2022 23:10:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=BB=8E=E7=BB=9D=E5=AF=B9=E8=B7=AF=E5=BE=84=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=88=E7=89=B9=E6=AE=8A=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=BD=BF=E7=94=A8=EF=BC=8C=E6=AF=94=E5=A6=82=E5=86=99?= =?UTF-8?q?Minecraft=E6=8F=92=E4=BB=B6=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/db/DbUtil.java | 15 +++++- .../cn/hutool/db/ds/AbstractDSFactory.java | 49 ++++++++++++++----- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/hutool-db/src/main/java/cn/hutool/db/DbUtil.java b/hutool-db/src/main/java/cn/hutool/db/DbUtil.java index e6fff3a54..c3ac7a434 100644 --- a/hutool-db/src/main/java/cn/hutool/db/DbUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/DbUtil.java @@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.db.dialect.Dialect; import cn.hutool.db.dialect.DialectFactory; +import cn.hutool.db.ds.AbstractDSFactory; import cn.hutool.db.ds.DSFactory; import cn.hutool.db.sql.SqlLog; import cn.hutool.log.Log; @@ -110,7 +111,7 @@ public final class DbUtil { */ public static void close(Object... objsToClose) { for (Object obj : objsToClose) { - if(null != obj){ + if (null != obj) { if (obj instanceof AutoCloseable) { IoUtil.close((AutoCloseable) obj); } else { @@ -175,7 +176,7 @@ public final class DbUtil { * @param setting 配置项 * @since 5.7.2 */ - public static void removeShowSqlParams(Setting setting){ + public static void removeShowSqlParams(Setting setting) { setting.remove(SqlLog.KEY_SHOW_SQL); setting.remove(SqlLog.KEY_FORMAT_SQL); setting.remove(SqlLog.KEY_SHOW_PARAMS); @@ -237,4 +238,14 @@ public final class DbUtil { public static void setReturnGeneratedKeyGlobal(boolean returnGeneratedKey) { GlobalDbConfig.setReturnGeneratedKey(returnGeneratedKey); } + + /** + * 设置从绝对路径加载数据库配置文件 + * (特殊情况使用,比如写Minecraft插件的时候) + * + * @param absolutePath 配置文件的绝对路径 + */ + public static void setCustomizeDbSettingPath(String absolutePath) { + AbstractDSFactory.CUSTOMIZE_DB_SETTING_PATH = absolutePath; + } } diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/AbstractDSFactory.java b/hutool-db/src/main/java/cn/hutool/db/ds/AbstractDSFactory.java index 30ebb0284..d3de02f98 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/AbstractDSFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/AbstractDSFactory.java @@ -20,33 +20,51 @@ import java.util.concurrent.ConcurrentHashMap; * 数据源是与配置文件中的分组相关的,每个分组的数据源相互独立,也就是每个分组的数据源是单例存在的。 * * @author looly - * */ public abstract class AbstractDSFactory extends DSFactory { private static final long serialVersionUID = -6407302276272379881L; - /** 数据库配置文件可选路径1 */ + /** + * 数据库配置文件可选路径1 + */ private static final String DEFAULT_DB_SETTING_PATH = "config/db.setting"; - /** 数据库配置文件可选路径2 */ + /** + * 数据库配置文件可选路径2 + */ private static final String DEFAULT_DB_SETTING_PATH2 = "db.setting"; + /** + * 自定义数据库配置文件路径(绝对路径,特殊情况使用,比如写Minecraft插件的时候) + */ + public static String CUSTOMIZE_DB_SETTING_PATH = null; - /** 数据库连接配置文件 */ + /** + * 数据库连接配置文件 + */ private final Setting setting; - /** 数据源池 */ + /** + * 数据源池 + */ private final Map dsMap; /** * 构造 * - * @param dataSourceName 数据源名称 + * @param dataSourceName 数据源名称 * @param dataSourceClass 数据库连接池实现类,用于检测所提供的DataSource类是否存在,当传入的DataSource类不存在时抛出ClassNotFoundException
- * 此参数的作用是在detectDSFactory方法自动检测所用连接池时,如果实现类不存在,调用此方法会自动抛出异常,从而切换到下一种连接池的检测。 - * @param setting 数据库连接配置 + * 此参数的作用是在detectDSFactory方法自动检测所用连接池时,如果实现类不存在,调用此方法会自动抛出异常,从而切换到下一种连接池的检测。 + * @param setting 数据库连接配置 */ public AbstractDSFactory(String dataSourceName, Class dataSourceClass, Setting setting) { super(dataSourceName); //此参数的作用是在detectDSFactory方法自动检测所用连接池时,如果实现类不存在,调用此方法会自动抛出异常,从而切换到下一种连接池的检测。 Assert.notNull(dataSourceClass); + if (CUSTOMIZE_DB_SETTING_PATH != null) { + try { + setting = new Setting(CUSTOMIZE_DB_SETTING_PATH, false); + } catch (NoResourceException e3) { + throw new NoResourceException("Customize db setting file [{}] not found !", CUSTOMIZE_DB_SETTING_PATH); + } + } if (null == setting) { try { setting = new Setting(DEFAULT_DB_SETTING_PATH, true); @@ -58,6 +76,13 @@ public abstract class AbstractDSFactory extends DSFactory { throw new NoResourceException("Default db setting [{}] or [{}] in classpath not found !", DEFAULT_DB_SETTING_PATH, DEFAULT_DB_SETTING_PATH2); } } + if (CUSTOMIZE_DB_SETTING_PATH != null) { + try { + setting = new Setting(CUSTOMIZE_DB_SETTING_PATH, false); + } catch (NoResourceException e3) { + throw new NoResourceException("Customize db setting file [{}] not found !", CUSTOMIZE_DB_SETTING_PATH); + } + } } // 读取配置,用于SQL打印 @@ -135,10 +160,10 @@ public abstract class AbstractDSFactory extends DSFactory { /** * 创建新的{@link DataSource}
* - * @param jdbcUrl JDBC连接字符串 - * @param driver 数据库驱动类名 - * @param user 用户名 - * @param pass 密码 + * @param jdbcUrl JDBC连接字符串 + * @param driver 数据库驱动类名 + * @param user 用户名 + * @param pass 密码 * @param poolSetting 分组下的连接池配置文件 * @return {@link DataSource} */