From b696ad4b08cea95068b1dac7e9ea0d9888caf384 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 3 Nov 2022 00:10:25 +0800 Subject: [PATCH] fix code --- .../java/cn/hutool/core/bean/BeanUtil.java | 18 ++++++------- .../cn/hutool/db/dialect/DialectFactory.java | 25 +++++++++++++------ .../cn/hutool/db/ds/druid/DruidDSFactory.java | 2 -- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java index 67cb068f7..9cb69a1f1 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java @@ -812,12 +812,12 @@ public class BeanUtil { * 判断Bean是否为非空对象,非空对象表示本身不为{@code null}或者含有非{@code null}属性的对象 * * @param bean Bean对象 - * @param ignoreFiledNames 忽略检查的字段名 + * @param ignoreFieldNames 忽略检查的字段名 * @return 是否为非空,{@code true} - 非空 / {@code false} - 空 * @since 5.0.7 */ - public static boolean isNotEmpty(final Object bean, final String... ignoreFiledNames) { - return false == isEmpty(bean, ignoreFiledNames); + public static boolean isNotEmpty(final Object bean, final String... ignoreFieldNames) { + return false == isEmpty(bean, ignoreFieldNames); } /** @@ -825,17 +825,17 @@ public class BeanUtil { * 此方法不判断static属性 * * @param bean Bean对象 - * @param ignoreFiledNames 忽略检查的字段名 + * @param ignoreFieldNames 忽略检查的字段名 * @return 是否为空,{@code true} - 空 / {@code false} - 非空 * @since 4.1.10 */ - public static boolean isEmpty(final Object bean, final String... ignoreFiledNames) { + public static boolean isEmpty(final Object bean, final String... ignoreFieldNames) { if (null != bean) { for (final Field field : FieldUtil.getFields(bean.getClass())) { if (ModifierUtil.isStatic(field)) { continue; } - if ((false == ArrayUtil.contains(ignoreFiledNames, field.getName())) + if ((false == ArrayUtil.contains(ignoreFieldNames, field.getName())) && null != FieldUtil.getFieldValue(bean, field)) { return false; } @@ -849,11 +849,11 @@ public class BeanUtil { * 对象本身为{@code null}也返回true * * @param bean Bean对象 - * @param ignoreFiledNames 忽略检查的字段名 + * @param ignoreFieldNames 忽略检查的字段名 * @return 是否包含值为null的属性,{@code true} - 包含 / {@code false} - 不包含 * @since 4.1.10 */ - public static boolean hasNullField(final Object bean, final String... ignoreFiledNames) { + public static boolean hasNullField(final Object bean, final String... ignoreFieldNames) { if (null == bean) { return true; } @@ -861,7 +861,7 @@ public class BeanUtil { if (ModifierUtil.isStatic(field)) { continue; } - if ((false == ArrayUtil.contains(ignoreFiledNames, field.getName())) + if ((false == ArrayUtil.contains(ignoreFieldNames, field.getName())) && null == FieldUtil.getFieldValue(bean, field)) { return true; } diff --git a/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java b/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java index 2ebbfd7cf..2f1628599 100755 --- a/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java @@ -22,9 +22,8 @@ import java.util.Map; * 方言工厂类 * * @author loolly - * */ -public class DialectFactory implements DriverNamePool{ +public class DialectFactory implements DriverNamePool { private static final Map DIALECT_POOL = new SafeConcurrentHashMap<>(); @@ -79,7 +78,18 @@ public class DialectFactory implements DriverNamePool{ * @param nameContainsProductInfo 包含数据库标识的字符串 * @return 驱动 */ - public static String identifyDriver(String nameContainsProductInfo) { + public static String identifyDriver(final String nameContainsProductInfo) { + return identifyDriver(nameContainsProductInfo, null); + } + + /** + * 通过JDBC URL等信息识别JDBC驱动名 + * + * @param nameContainsProductInfo 包含数据库标识的字符串 + * @param classLoader 类加载器,{@code null}表示默认上下文的类加载器 + * @return 驱动 + */ + public static String identifyDriver(String nameContainsProductInfo, final ClassLoader classLoader) { if (StrUtil.isBlank(nameContainsProductInfo)) { return null; } @@ -88,15 +98,15 @@ public class DialectFactory implements DriverNamePool{ // 首先判断是否为标准的JDBC URL,截取jdbc:xxxx:中间部分 final String name = ReUtil.getGroup1("jdbc:(.*?):", nameContainsProductInfo); - if(StrUtil.isNotBlank(name)){ + if (StrUtil.isNotBlank(name)) { nameContainsProductInfo = name; } String driver = null; if (nameContainsProductInfo.contains("mysql") || nameContainsProductInfo.contains("cobar")) { - driver = ClassLoaderUtil.isPresent(DRIVER_MYSQL_V6) ? DRIVER_MYSQL_V6 : DRIVER_MYSQL; + driver = ClassLoaderUtil.isPresent(DRIVER_MYSQL_V6, classLoader) ? DRIVER_MYSQL_V6 : DRIVER_MYSQL; } else if (nameContainsProductInfo.contains("oracle")) { - driver = ClassLoaderUtil.isPresent(DRIVER_ORACLE) ? DRIVER_ORACLE : DRIVER_ORACLE_OLD; + driver = ClassLoaderUtil.isPresent(DRIVER_ORACLE, classLoader) ? DRIVER_ORACLE : DRIVER_ORACLE_OLD; } else if (nameContainsProductInfo.contains("postgresql")) { driver = DRIVER_POSTGRESQL; } else if (nameContainsProductInfo.contains("sqlite")) { @@ -161,12 +171,13 @@ public class DialectFactory implements DriverNamePool{ /** * 获取共享方言 + * * @param ds 数据源,每一个数据源对应一个唯一方言 * @return {@link Dialect}方言 */ public static Dialect getDialect(final DataSource ds) { Dialect dialect = DIALECT_POOL.get(ds); - if(null == dialect) { + if (null == dialect) { // 数据源作为锁的意义在于:不同数据源不会导致阻塞,相同数据源获取方言时可保证互斥 //noinspection SynchronizationOnLocalVariableOrMethodParameter synchronized (ds) { diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/druid/DruidDSFactory.java b/hutool-db/src/main/java/cn/hutool/db/ds/druid/DruidDSFactory.java index 97ba452a0..e9347a1d5 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/druid/DruidDSFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/druid/DruidDSFactory.java @@ -61,8 +61,6 @@ public class DruidDSFactory extends AbstractDSFactory { ds.configFromPropety(druidProps); //issue#I4ZKCW 某些非属性设置单独设置 - final String[] specialKeys = {"druid.connectionErrorRetryAttempts", "druid.breakAfterAcquireFailure"}; - // connectionErrorRetryAttempts final String connectionErrorRetryAttemptsKey = "druid.connectionErrorRetryAttempts"; if(druidProps.containsKey(connectionErrorRetryAttemptsKey)){