diff --git a/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidConfigUtil.java b/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidConfigUtil.java index 06765c1..b3d0230 100644 --- a/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidConfigUtil.java +++ b/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidConfigUtil.java @@ -16,6 +16,7 @@ package com.baomidou.dynamic.datasource.creator.druid; import com.baomidou.dynamic.datasource.toolkit.DsConfigUtil; +import lombok.NonNull; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -42,7 +43,7 @@ public final class DruidConfigUtil { * @return Druid配置 */ @SneakyThrows - public static Properties mergeConfig(DruidConfig g, DruidConfig c) { + public static Properties mergeConfig(DruidConfig g, @NonNull DruidConfig c) { Properties properties = new Properties(); for (Map.Entry entry : METHODS.entrySet()) { String key = entry.getKey(); @@ -61,26 +62,56 @@ public final class DruidConfigUtil { } //filters单独处理,默认了stat -// String filters = this.filters == null ? g.getFilters() : this.filters; -// if (filters == null) { -// filters = DruidConsts.STAT_STR; -// } -// if (publicKey != null && publicKey.length() > 0 && !filters.contains(DruidConsts.CONFIG_STR)) { -// filters += "," + DruidConsts.CONFIG_STR; -// } -// properties.setProperty(DruidConsts.FILTERS, filters); -// -// Properties connectProperties = connectionProperties == null ? g.getConnectionProperties() : connectionProperties; -// -// if (publicKey != null && publicKey.length() > 0) { -// if (connectProperties == null) { -// connectProperties = new Properties(); -// } -// connectProperties.setProperty("config.decrypt", Boolean.TRUE.toString()); -// connectProperties.setProperty("config.decrypt.key", publicKey); -// } -// this.connectionProperties = connectProperties; + String filters = getValue(g, c, "filter"); + if (filters == null) { + filters = DruidConsts.STAT_STR; + } + String publicKey = getValue(g, c, "publicKey"); + boolean configFilterExist = publicKey != null && publicKey.length() > 0; + if (publicKey != null && publicKey.length() > 0 && !filters.contains(DruidConsts.CONFIG_STR)) { + filters += "," + DruidConsts.CONFIG_STR; + } + properties.setProperty(DruidConsts.FILTERS, filters); + Properties connectProperties = new Properties(); + Properties cConnectionProperties = c.getConnectionProperties(); + if (g != null) { + Properties gConnectionProperties = g.getConnectionProperties(); + if (gConnectionProperties != null) { + connectProperties.putAll(gConnectionProperties); + } + } + if (cConnectionProperties != null) { + connectProperties.putAll(cConnectionProperties); + } + if (configFilterExist) { + connectProperties.setProperty("config.decrypt", Boolean.TRUE.toString()); + connectProperties.setProperty("config.decrypt.key", publicKey); + } + c.setConnectionProperties(connectProperties); return properties; } + + public static String getValue(DruidConfig g, @NonNull DruidConfig c, String field) { + Method method = METHODS.get(field); + if (method == null) { + return null; + } + try { + Object value = method.invoke(c); + if (value != null) { + return String.valueOf(value); + } + if (g != null) { + value = method.invoke(g); + if (value != null) { + return String.valueOf(value); + } + } + } catch (Exception e) { + // do nothing + } + return null; + + } } \ No newline at end of file diff --git a/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidDataSourceCreator.java b/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidDataSourceCreator.java index de6e6fa..2f421bb 100644 --- a/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidDataSourceCreator.java +++ b/dynamic-datasource-creator/src/main/java/com/baomidou/dynamic/datasource/creator/druid/DruidDataSourceCreator.java @@ -65,7 +65,6 @@ public class DruidDataSourceCreator implements DataSourceCreator { * Druid since 1.2.17 use 'configFromPropeties' to copy config * Druid < 1.2.17 use 'configFromPropety' to copy config */ - @SuppressWarnings("JavaReflectionMemberAccess") private static void fetchMethod() { Class aClass = DruidDataSource.class; try {