You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by ky...@apache.org on 2021/07/20 03:22:24 UTC
[dubbo] branch 3.0 updated: support
dubbo.registry.parameters.item3=value3 configuration properties (#8308)
This is an automated email from the ASF dual-hosted git repository.
kylixs pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new cb10c9e support dubbo.registry.parameters.item3=value3 configuration properties (#8308)
cb10c9e is described below
commit cb10c9e568638a04d8cff8f0190525ff85fcda3a
Author: xiaoheng1 <20...@qq.com>
AuthorDate: Tue Jul 20 11:22:03 2021 +0800
support dubbo.registry.parameters.item3=value3 configuration properties (#8308)
---
.../dubbo/common/config/ConfigurationUtils.java | 27 ++++++++++++++++++----
.../org/apache/dubbo/config/AbstractConfig.java | 21 +++++++++++++----
.../java/org/apache/dubbo/config/Constants.java | 2 ++
.../apache/dubbo/config/AbstractConfigTest.java | 14 +++++++++++
4 files changed, 55 insertions(+), 9 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
index b988d26..913b218 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
@@ -166,12 +166,28 @@ public class ConfigurationUtils {
* @return
*/
public static <V extends Object> Map<String, V> getSubProperties(Collection<Map<String, V>> configMaps, String prefix) {
+ Map<String, V> map = new LinkedHashMap<>();
+ for (Map<String, V> configMap : configMaps) {
+ getSubProperties(configMap, prefix, map);
+ }
+ return map;
+ }
+
+ public static <V extends Object> Map<String, V> getSubProperties(Map<String, V> configMap, String prefix) {
+ return getSubProperties(configMap, prefix, null);
+ }
+
+ private static <V extends Object> Map<String, V> getSubProperties(Map<String, V> configMap, String prefix, Map<String, V> resultMap) {
if (!prefix.endsWith(".")) {
prefix += ".";
}
- Map<String, V> map = new LinkedHashMap<>();
- for (Map<String, V> configMap : configMaps) {
- for (Map.Entry<String, V> entry : configMap.entrySet()) {
+
+ if (null == resultMap) {
+ resultMap = new LinkedHashMap<>();
+ }
+
+ if (null != configMap) {
+ for(Map.Entry<String, V> entry : configMap.entrySet()) {
String key = entry.getKey();
V val = entry.getValue();
if (StringUtils.startsWithIgnoreCase(key, prefix)
@@ -181,11 +197,12 @@ public class ConfigurationUtils {
String k = key.substring(prefix.length());
// convert camelCase/snake_case to kebab-case
k = StringUtils.convertToSplitName(k, "-");
- map.putIfAbsent(k, val);
+ resultMap.putIfAbsent(k, val);
}
}
}
- return map;
+
+ return resultMap;
}
public static <V extends Object> boolean hasSubProperties(Collection<Map<String, V>> configMaps, String prefix) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index efe5941..4759237 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -55,6 +55,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import static org.apache.dubbo.common.utils.ReflectUtils.findMethodByMethodSignature;
+import static org.apache.dubbo.config.Constants.PARAMETERS;
/**
* Utility methods and public methods for parsing configuration
@@ -546,12 +547,14 @@ public abstract class AbstractConfig implements Serializable {
} else if (isParametersSetter(method)) {
String propertyName = extractPropertyName(method.getName());
String value = StringUtils.trim(subPropsConfiguration.getString(propertyName));
+ Map<String, String> parameterMap = null;
if (StringUtils.hasText(value)) {
- Map<String, String> map = invokeGetParameters(getClass(), this);
- map = map == null ? new HashMap<>() : map;
- map.putAll(convert(StringUtils.parseParameters(value), ""));
- invokeSetParameters(getClass(), this, map);
+ parameterMap = StringUtils.parseParameters(value);
+ } else {
+ // in this case, maybe parameters.item3=value3.
+ parameterMap = ConfigurationUtils.getSubProperties(subProperties, PARAMETERS);
}
+ invokeSetParameters(convert(parameterMap, ""));
}
}
@@ -566,6 +569,16 @@ public abstract class AbstractConfig implements Serializable {
postProcessRefresh();
}
+ private void invokeSetParameters(Map<String, String> values) {
+ if (CollectionUtils.isEmptyMap(values)) {
+ return;
+ }
+ Map<String, String> map = invokeGetParameters(getClass(), this);
+ map = map == null ? new HashMap<>() : map;
+ map.putAll(values);
+ invokeSetParameters(getClass(), this, map);
+ }
+
private boolean isIgnoredAttribute(Class<? extends AbstractConfig> clazz, String propertyName) {
Method getter = null;
String capitalizePropertyName = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java b/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java
index 09941b7..a08d014 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/Constants.java
@@ -125,4 +125,6 @@ public interface Constants {
String[] DOT_COMPATIBLE_KEYS = new String[]{"qos-enable", "qos-port", "qos-accept-foreign-ip"};
String IGNORE_CHECK_KEYS = "ignoreCheckKeys";
+
+ String PARAMETERS = "parameters";
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
index 2cb5c78..450ba35 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
@@ -43,6 +43,7 @@ import java.util.Map;
import java.util.Properties;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@@ -505,6 +506,19 @@ public class AbstractConfigTest {
}
@Test
+ public void testRefreshParametersWithAttribute() {
+ try {
+ OverrideConfig overrideConfig = new OverrideConfig();
+ SysProps.setProperty("dubbo.override.parameters.key00", "value00");
+ overrideConfig.refresh();
+ assertEquals("value00", overrideConfig.getParameters().get("key00"));
+ } finally {
+ SysProps.clear();
+ ApplicationModel.getEnvironment().destroy();
+ }
+ }
+
+ @Test
public void testOnlyPrefixedKeyTakeEffect() {
try {
OverrideConfig overrideConfig = new OverrideConfig();