This commit is contained in:
Looly 2022-11-03 00:10:25 +08:00
parent e05e9f13b5
commit b696ad4b08
3 changed files with 27 additions and 18 deletions

View File

@ -812,12 +812,12 @@ public class BeanUtil {
* 判断Bean是否为非空对象非空对象表示本身不为{@code null}或者含有非{@code null}属性的对象 * 判断Bean是否为非空对象非空对象表示本身不为{@code null}或者含有非{@code null}属性的对象
* *
* @param bean Bean对象 * @param bean Bean对象
* @param ignoreFiledNames 忽略检查的字段名 * @param ignoreFieldNames 忽略检查的字段名
* @return 是否为非空{@code true} - 非空 / {@code false} - * @return 是否为非空{@code true} - 非空 / {@code false} -
* @since 5.0.7 * @since 5.0.7
*/ */
public static boolean isNotEmpty(final Object bean, final String... ignoreFiledNames) { public static boolean isNotEmpty(final Object bean, final String... ignoreFieldNames) {
return false == isEmpty(bean, ignoreFiledNames); return false == isEmpty(bean, ignoreFieldNames);
} }
/** /**
@ -825,17 +825,17 @@ public class BeanUtil {
* 此方法不判断static属性 * 此方法不判断static属性
* *
* @param bean Bean对象 * @param bean Bean对象
* @param ignoreFiledNames 忽略检查的字段名 * @param ignoreFieldNames 忽略检查的字段名
* @return 是否为空{@code true} - / {@code false} - 非空 * @return 是否为空{@code true} - / {@code false} - 非空
* @since 4.1.10 * @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) { if (null != bean) {
for (final Field field : FieldUtil.getFields(bean.getClass())) { for (final Field field : FieldUtil.getFields(bean.getClass())) {
if (ModifierUtil.isStatic(field)) { if (ModifierUtil.isStatic(field)) {
continue; continue;
} }
if ((false == ArrayUtil.contains(ignoreFiledNames, field.getName())) if ((false == ArrayUtil.contains(ignoreFieldNames, field.getName()))
&& null != FieldUtil.getFieldValue(bean, field)) { && null != FieldUtil.getFieldValue(bean, field)) {
return false; return false;
} }
@ -849,11 +849,11 @@ public class BeanUtil {
* 对象本身为{@code null}也返回true * 对象本身为{@code null}也返回true
* *
* @param bean Bean对象 * @param bean Bean对象
* @param ignoreFiledNames 忽略检查的字段名 * @param ignoreFieldNames 忽略检查的字段名
* @return 是否包含值为<code>null</code>的属性{@code true} - 包含 / {@code false} - 不包含 * @return 是否包含值为<code>null</code>的属性{@code true} - 包含 / {@code false} - 不包含
* @since 4.1.10 * @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) { if (null == bean) {
return true; return true;
} }
@ -861,7 +861,7 @@ public class BeanUtil {
if (ModifierUtil.isStatic(field)) { if (ModifierUtil.isStatic(field)) {
continue; continue;
} }
if ((false == ArrayUtil.contains(ignoreFiledNames, field.getName())) if ((false == ArrayUtil.contains(ignoreFieldNames, field.getName()))
&& null == FieldUtil.getFieldValue(bean, field)) { && null == FieldUtil.getFieldValue(bean, field)) {
return true; return true;
} }

View File

@ -22,9 +22,8 @@ import java.util.Map;
* 方言工厂类 * 方言工厂类
* *
* @author loolly * @author loolly
*
*/ */
public class DialectFactory implements DriverNamePool{ public class DialectFactory implements DriverNamePool {
private static final Map<DataSource, Dialect> DIALECT_POOL = new SafeConcurrentHashMap<>(); private static final Map<DataSource, Dialect> DIALECT_POOL = new SafeConcurrentHashMap<>();
@ -79,7 +78,18 @@ public class DialectFactory implements DriverNamePool{
* @param nameContainsProductInfo 包含数据库标识的字符串 * @param nameContainsProductInfo 包含数据库标识的字符串
* @return 驱动 * @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)) { if (StrUtil.isBlank(nameContainsProductInfo)) {
return null; return null;
} }
@ -88,15 +98,15 @@ public class DialectFactory implements DriverNamePool{
// 首先判断是否为标准的JDBC URL截取jdbc:xxxx:中间部分 // 首先判断是否为标准的JDBC URL截取jdbc:xxxx:中间部分
final String name = ReUtil.getGroup1("jdbc:(.*?):", nameContainsProductInfo); final String name = ReUtil.getGroup1("jdbc:(.*?):", nameContainsProductInfo);
if(StrUtil.isNotBlank(name)){ if (StrUtil.isNotBlank(name)) {
nameContainsProductInfo = name; nameContainsProductInfo = name;
} }
String driver = null; String driver = null;
if (nameContainsProductInfo.contains("mysql") || nameContainsProductInfo.contains("cobar")) { 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")) { } 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")) { } else if (nameContainsProductInfo.contains("postgresql")) {
driver = DRIVER_POSTGRESQL; driver = DRIVER_POSTGRESQL;
} else if (nameContainsProductInfo.contains("sqlite")) { } else if (nameContainsProductInfo.contains("sqlite")) {
@ -161,12 +171,13 @@ public class DialectFactory implements DriverNamePool{
/** /**
* 获取共享方言 * 获取共享方言
*
* @param ds 数据源每一个数据源对应一个唯一方言 * @param ds 数据源每一个数据源对应一个唯一方言
* @return {@link Dialect}方言 * @return {@link Dialect}方言
*/ */
public static Dialect getDialect(final DataSource ds) { public static Dialect getDialect(final DataSource ds) {
Dialect dialect = DIALECT_POOL.get(ds); Dialect dialect = DIALECT_POOL.get(ds);
if(null == dialect) { if (null == dialect) {
// 数据源作为锁的意义在于不同数据源不会导致阻塞相同数据源获取方言时可保证互斥 // 数据源作为锁的意义在于不同数据源不会导致阻塞相同数据源获取方言时可保证互斥
//noinspection SynchronizationOnLocalVariableOrMethodParameter //noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (ds) { synchronized (ds) {

View File

@ -61,8 +61,6 @@ public class DruidDSFactory extends AbstractDSFactory {
ds.configFromPropety(druidProps); ds.configFromPropety(druidProps);
//issue#I4ZKCW 某些非属性设置单独设置 //issue#I4ZKCW 某些非属性设置单独设置
final String[] specialKeys = {"druid.connectionErrorRetryAttempts", "druid.breakAfterAcquireFailure"};
// connectionErrorRetryAttempts // connectionErrorRetryAttempts
final String connectionErrorRetryAttemptsKey = "druid.connectionErrorRetryAttempts"; final String connectionErrorRetryAttemptsKey = "druid.connectionErrorRetryAttempts";
if(druidProps.containsKey(connectionErrorRetryAttemptsKey)){ if(druidProps.containsKey(connectionErrorRetryAttemptsKey)){