fix: druid connConfig

This commit is contained in:
TaoYu 2023-07-12 16:39:52 +08:00
parent 7d7606fcdb
commit 1acd3bb450
2 changed files with 51 additions and 21 deletions

View File

@ -16,6 +16,7 @@
package com.baomidou.dynamic.datasource.creator.druid; package com.baomidou.dynamic.datasource.creator.druid;
import com.baomidou.dynamic.datasource.toolkit.DsConfigUtil; import com.baomidou.dynamic.datasource.toolkit.DsConfigUtil;
import lombok.NonNull;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -42,7 +43,7 @@ public final class DruidConfigUtil {
* @return Druid配置 * @return Druid配置
*/ */
@SneakyThrows @SneakyThrows
public static Properties mergeConfig(DruidConfig g, DruidConfig c) { public static Properties mergeConfig(DruidConfig g, @NonNull DruidConfig c) {
Properties properties = new Properties(); Properties properties = new Properties();
for (Map.Entry<String, Method> entry : METHODS.entrySet()) { for (Map.Entry<String, Method> entry : METHODS.entrySet()) {
String key = entry.getKey(); String key = entry.getKey();
@ -61,26 +62,56 @@ public final class DruidConfigUtil {
} }
//filters单独处理默认了stat //filters单独处理默认了stat
// String filters = this.filters == null ? g.getFilters() : this.filters; String filters = getValue(g, c, "filter");
// if (filters == null) { if (filters == null) {
// filters = DruidConsts.STAT_STR; filters = DruidConsts.STAT_STR;
// } }
// if (publicKey != null && publicKey.length() > 0 && !filters.contains(DruidConsts.CONFIG_STR)) { String publicKey = getValue(g, c, "publicKey");
// filters += "," + DruidConsts.CONFIG_STR; boolean configFilterExist = publicKey != null && publicKey.length() > 0;
// } if (publicKey != null && publicKey.length() > 0 && !filters.contains(DruidConsts.CONFIG_STR)) {
// properties.setProperty(DruidConsts.FILTERS, filters); filters += "," + DruidConsts.CONFIG_STR;
// }
// Properties connectProperties = connectionProperties == null ? g.getConnectionProperties() : connectionProperties; properties.setProperty(DruidConsts.FILTERS, filters);
//
// 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;
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; 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;
}
} }

View File

@ -65,7 +65,6 @@ public class DruidDataSourceCreator implements DataSourceCreator {
* Druid since 1.2.17 use 'configFromPropeties' to copy config * Druid since 1.2.17 use 'configFromPropeties' to copy config
* Druid < 1.2.17 use 'configFromPropety' to copy config * Druid < 1.2.17 use 'configFromPropety' to copy config
*/ */
@SuppressWarnings("JavaReflectionMemberAccess")
private static void fetchMethod() { private static void fetchMethod() {
Class<DruidDataSource> aClass = DruidDataSource.class; Class<DruidDataSource> aClass = DruidDataSource.class;
try { try {