This is an automated email from the ASF dual-hosted git repository.
victory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 23903ba [Dubbo-3266] Change DynamicConfiguration definition to better
adapt to Apollo's namespace storage model. (#3271)
23903ba is described below
commit 23903ba32aa3dd4878263e93e3267cfc8a7e0f26
Author: ken.lj <[email protected]>
AuthorDate: Mon May 20 09:59:30 2019 +0800
[Dubbo-3266] Change DynamicConfiguration definition to better adapt to
Apollo's namespace storage model. (#3271)
---
.../dubbo/config/AbstractInterfaceConfig.java | 4 +-
.../apache/dubbo/config/ConfigCenterConfig.java | 51 ++++++++++++++--------
.../dubbo/config/builders/ConfigCenterBuilder.java | 6 ---
.../apache/dubbo/config/AbstractConfigTest.java | 20 +++++++++
.../config/builders/ConfigCenterBuilderTest.java | 10 +----
.../dubbo/config/spring/ConfigCenterBean.java | 39 +++--------------
.../src/main/resources/META-INF/compat/dubbo.xsd | 9 ++--
.../src/main/resources/META-INF/dubbo.xsd | 9 ++--
.../dubbo/configcenter/DynamicConfiguration.java | 29 ++++++++++--
.../support/nop/NopDynamicConfiguration.java | 5 +++
.../mock/MockDynamicConfiguration.java | 5 +++
.../support/apollo/ApolloDynamicConfiguration.java | 32 ++++++++++++--
.../consul/ConsulDynamicConfiguration.java | 5 +++
.../support/etcd/EtcdDynamicConfiguration.java | 5 +++
.../support/nacos/NacosDynamicConfiguration.java | 5 +++
.../zookeeper/ZookeeperDynamicConfiguration.java | 14 ++++++
.../ZookeeperDynamicConfigurationTest.java | 2 +-
17 files changed, 165 insertions(+), 85 deletions(-)
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 143d085..cc39451 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -287,12 +287,12 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
return;
}
DynamicConfiguration dynamicConfiguration =
getDynamicConfiguration(configCenter.toUrl());
- String configContent =
dynamicConfiguration.getConfig(configCenter.getConfigFile(),
configCenter.getGroup());
+ String configContent =
dynamicConfiguration.getConfigs(configCenter.getConfigFile(),
configCenter.getGroup());
String appGroup = application != null ? application.getName() :
null;
String appConfigContent = null;
if (StringUtils.isNotEmpty(appGroup)) {
- appConfigContent = dynamicConfiguration.getConfig
+ appConfigContent = dynamicConfiguration.getConfigs
(StringUtils.isNotEmpty(configCenter.getAppConfigFile()) ?
configCenter.getAppConfigFile() : configCenter.getConfigFile(),
appGroup
);
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index d65f2e2..ed511fd 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.config;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.Environment;
+import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.config.support.Parameter;
@@ -28,15 +29,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE;
import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
-import static org.apache.dubbo.config.Constants.CONFIG_APPNAME_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_CHECK_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_CLUSTER_KEY;
-import static org.apache.dubbo.config.Constants.CONFIG_CONFIGFILE_KEY;
-import static org.apache.dubbo.config.Constants.CONFIG_ENABLE_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_GROUP_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_NAMESPACE_KEY;
-import static org.apache.dubbo.config.Constants.CONFIG_TIMEOUT_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.ZOOKEEPER_PROTOCOL;
+import static org.apache.dubbo.config.Constants.CONFIG_CONFIGFILE_KEY;
+import static org.apache.dubbo.config.Constants.CONFIG_ENABLE_KEY;
+import static org.apache.dubbo.config.Constants.CONFIG_TIMEOUT_KEY;
/**
* ConfigCenterConfig
@@ -46,20 +46,44 @@ public class ConfigCenterConfig extends AbstractConfig {
private String protocol;
private String address;
+
+ /* The config center cluster, it's real meaning may very on different
Config Center products. */
private String cluster;
- private String namespace = "dubbo";
- private String group = "dubbo";
+
+ /* The namespace of the config center, generally it's used for
multi-tenant,
+ but it's real meaning depends on the actual Config Center you use.
+ */
+
+ private String namespace = CommonConstants.DUBBO;
+ /* The group of the config center, generally it's used to identify an
isolated space for a batch of config items,
+ but it's real meaning depends on the actual Config Center you use.
+ */
+ private String group = CommonConstants.DUBBO;
private String username;
private String password;
private Long timeout = 3000L;
+
+ // If the Config Center is given the highest priority, it will override
all the other configurations
private Boolean highestPriority = true;
+
+ // Decide the behaviour when initial connection try fails, 'true' means
interrupt the whole process once fail.
private Boolean check = true;
- private String appName;
- private String configFile = "dubbo.properties";
+ /* Used to specify the key that your properties file mapping to, most of
the time you do not need to change this parameter.
+ Notice that for Apollo, this parameter is meaningless, set the 'namespace'
is enough.
+ */
+ private String configFile = CommonConstants.DEFAULT_DUBBO_PROPERTIES;
+
+ /* the .properties file under 'configFile' is global shared while
.properties under this one is limited only to this application
+ */
private String appConfigFile;
- // customized parameters
+ /* If the Config Center product you use have some special parameters that
is not covered by this class, you can add it to here.
+ For example, with XML:
+ <dubbo:config-center>
+ <dubbo:parameter key="config.{your key}" value="{your value}" />
+ </dubbo:config-center>
+ */
private Map<String, String> parameters;
public ConfigCenterConfig() {
@@ -195,15 +219,6 @@ public class ConfigCenterConfig extends AbstractConfig {
this.appConfigFile = appConfigFile;
}
- @Parameter(key = CONFIG_APPNAME_KEY, useKeyAsProperty = false)
- public String getAppName() {
- return appName;
- }
-
- public void setAppName(String appName) {
- this.appName = appName;
- }
-
public Map<String, String> getParameters() {
return parameters;
}
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/ConfigCenterBuilder.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/ConfigCenterBuilder.java
index 44110e1..87ac00f 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/ConfigCenterBuilder.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/builders/ConfigCenterBuilder.java
@@ -94,11 +94,6 @@ public class ConfigCenterBuilder extends
AbstractBuilder<ConfigCenterConfig, Con
return getThis();
}
- public ConfigCenterBuilder appName(String appName) {
- this.appName = appName;
- return getThis();
- }
-
public ConfigCenterBuilder configFile(String configFile) {
this.configFile = configFile;
return getThis();
@@ -133,7 +128,6 @@ public class ConfigCenterBuilder extends
AbstractBuilder<ConfigCenterConfig, Con
configCenter.setTimeout(timeout);
configCenter.setHighestPriority(highestPriority);
configCenter.setCheck(check);
- configCenter.setAppName(appName);
configCenter.setConfigFile(configFile);
configCenter.setAppConfigFile(appConfigFile);
configCenter.setParameters(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 10cac65..9c57b32 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
@@ -467,6 +467,26 @@ public class AbstractConfigTest {
Assertions.assertNull(metaData.get("key2"));
}
+ @Test
+ public void testEquals() {
+ ApplicationConfig application1 = new ApplicationConfig();
+ ApplicationConfig application2 = new ApplicationConfig();
+ application1.setName("app1");
+ application2.setName("app2");
+ Assertions.assertNotEquals(application1, application2);
+ application1.setName("sameName");
+ application2.setName("sameName");
+ Assertions.assertEquals(application1, application2);
+
+ ProtocolConfig protocol1 = new ProtocolConfig();
+ protocol1.setHost("127.0.0.1");// excluded
+ protocol1.setName("dubbo");
+ ProtocolConfig protocol2 = new ProtocolConfig();
+ protocol2.setHost("127.0.0.2");// excluded
+ protocol2.setName("dubbo");
+ Assertions.assertEquals(protocol1, protocol2);
+ }
+
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE})
public @interface ConfigField {
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/ConfigCenterBuilderTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/ConfigCenterBuilderTest.java
index daf1fa8..1ab5acc 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/ConfigCenterBuilderTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/builders/ConfigCenterBuilderTest.java
@@ -97,13 +97,6 @@ class ConfigCenterBuilderTest {
}
@Test
- void appName() {
- ConfigCenterBuilder builder = new ConfigCenterBuilder();
- builder.appName("appName");
- Assertions.assertEquals("appName", builder.build().getAppName());
- }
-
- @Test
void configFile() {
ConfigCenterBuilder builder = new ConfigCenterBuilder();
builder.configFile("configFile");
@@ -146,7 +139,7 @@ class ConfigCenterBuilderTest {
@Test
void build() {
ConfigCenterBuilder builder = new ConfigCenterBuilder();
-
builder.check(true).protocol("protocol").address("address").appConfigFile("appConfigFile").appName("appName")
+
builder.check(true).protocol("protocol").address("address").appConfigFile("appConfigFile")
.cluster("cluster").configFile("configFile").group("group").highestPriority(false)
.namespace("namespace").password("password").timeout(1000L).username("usernama")
.appendParameter("default.num",
"one").id("id").prefix("prefix");
@@ -160,7 +153,6 @@ class ConfigCenterBuilderTest {
Assertions.assertEquals("protocol", config.getProtocol());
Assertions.assertEquals("address", config.getAddress());
Assertions.assertEquals("appConfigFile", config.getAppConfigFile());
- Assertions.assertEquals("appName", config.getAppName());
Assertions.assertEquals("cluster", config.getCluster());
Assertions.assertEquals("configFile", config.getConfigFile());
Assertions.assertEquals("group", config.getGroup());
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
index 1ea2485..062c9da 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
@@ -18,13 +18,10 @@ package org.apache.dubbo.config.spring;
import org.apache.dubbo.common.config.ConfigurationUtils;
import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ConfigCenterConfig;
import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
-import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.EnvironmentAware;
@@ -41,12 +38,11 @@ import java.util.Map;
* <p>
* If use ConfigCenterConfig directly, you should make sure
ConfigCenterConfig.init() is called before actually export/refer any Dubbo
service.
*/
-public class ConfigCenterBean extends ConfigCenterConfig implements
InitializingBean, ApplicationContextAware, DisposableBean, EnvironmentAware {
+public class ConfigCenterBean extends ConfigCenterConfig implements
ApplicationContextAware, DisposableBean, EnvironmentAware {
private transient ApplicationContext applicationContext;
private Boolean includeSpringEnv = false;
- private ApplicationConfig application;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
@@ -55,27 +51,6 @@ public class ConfigCenterBean extends ConfigCenterConfig
implements Initializing
}
@Override
- public void afterPropertiesSet() throws Exception {
- if (getApplication() == null) {
- Map<String, ApplicationConfig> applicationConfigMap =
applicationContext == null ? null :
BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext,
ApplicationConfig.class, false, false);
- if (applicationConfigMap != null && applicationConfigMap.size() >
0) {
- ApplicationConfig applicationConfig = null;
- for (ApplicationConfig config : applicationConfigMap.values())
{
- if (config.isDefault() == null || config.isDefault()) {
- if (applicationConfig != null) {
- throw new IllegalStateException("Duplicate
application configs: " + applicationConfig + " and " + config);
- }
- applicationConfig = config;
- }
- }
- if (applicationConfig != null) {
- setApplication(applicationConfig);
- }
- }
- }
- }
-
- @Override
public void destroy() throws Exception {
}
@@ -83,8 +58,11 @@ public class ConfigCenterBean extends ConfigCenterConfig
implements Initializing
@Override
public void setEnvironment(Environment environment) {
if (includeSpringEnv) {
+ // Get PropertySource mapped to 'dubbo.properties' in Spring
Environment.
Map<String, String> externalProperties =
getConfigurations(getConfigFile(), environment);
- Map<String, String> appExternalProperties =
getConfigurations(StringUtils.isNotEmpty(getAppConfigFile()) ?
getAppConfigFile() : (StringUtils.isEmpty(getAppName()) ? ("application." +
getConfigFile()) : (getAppName() + "." + getConfigFile())), environment);
+ // Get PropertySource mapped to 'application.dubbo.properties' in
Spring Environment.
+ Map<String, String> appExternalProperties =
getConfigurations(StringUtils.isNotEmpty(getAppConfigFile()) ?
getAppConfigFile() : ("application." + getConfigFile()), environment);
+ // Refresh Dubbo Environment
org.apache.dubbo.common.config.Environment.getInstance().setExternalConfigMap(externalProperties);
org.apache.dubbo.common.config.Environment.getInstance().setAppExternalConfigMap(appExternalProperties);
}
@@ -130,11 +108,4 @@ public class ConfigCenterBean extends ConfigCenterConfig
implements Initializing
this.includeSpringEnv = includeSpringEnv;
}
- public ApplicationConfig getApplication() {
- return application;
- }
-
- public void setApplication(ApplicationConfig application) {
- this.application = application;
- }
}
diff --git
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
index 9e179ef..c12389f 100644
---
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
+++
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
@@ -650,18 +650,19 @@
</xsd:attribute>
<xsd:attribute name="cluster" type="xsd:string" use="optional">
<xsd:annotation>
- <xsd:documentation><![CDATA[ The config center cluster.
]]></xsd:documentation>
+ <xsd:documentation><![CDATA[ The config center cluster, it's
real meaning may very on different Config Center products.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="namespace" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation>
- <![CDATA[ The group of the config center, an isolated
space for config items in the same config center. ]]></xsd:documentation>
+ <![CDATA[ The namespace of the config center, generally
it's used for multi-tenant, but it's real meaning depends on the actual Config
Center you use. ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
- <xsd:attribute name="app-name" type="xsd:string" use="optional">
+ <xsd:attribute name="group" type="xsd:string" use="optional">
<xsd:annotation>
- <xsd:documentation><![CDATA[ The group of the config center.
]]></xsd:documentation>
+ <xsd:documentation>
+ <![CDATA[ The group of the config center, generally it's
used to identify an isolated space for a batch of config items, but it's real
meaning depends on the actual Config Center you use.. ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="config-file" type="xsd:string" use="optional">
diff --git
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index e517f0c..5cc621f 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -644,18 +644,19 @@
</xsd:attribute>
<xsd:attribute name="cluster" type="xsd:string" use="optional">
<xsd:annotation>
- <xsd:documentation><![CDATA[ The config center cluster.
]]></xsd:documentation>
+ <xsd:documentation><![CDATA[ The config center cluster, it's
real meaning may very on different Config Center products.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="namespace" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation>
- <![CDATA[ The group of the config center, an isolated
space for config items in the same config center. ]]></xsd:documentation>
+ <![CDATA[ The namespace of the config center, generally
it's used for multi-tenant, but it's real meaning depends on the actual Config
Center you use. ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
- <xsd:attribute name="app-name" type="xsd:string" use="optional">
+ <xsd:attribute name="group" type="xsd:string" use="optional">
<xsd:annotation>
- <xsd:documentation><![CDATA[ The group of the config center.
]]></xsd:documentation>
+ <xsd:documentation>
+ <![CDATA[ The group of the config center, generally it's
used to identify an isolated space for a batch of config items, but it's real
meaning depends on the actual Config Center you use. ]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="config-file" type="xsd:string" use="optional">
diff --git
a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
index 620e8c2..23fc0f5 100644
---
a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
@@ -24,7 +24,14 @@ import java.util.Optional;
import static
org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
/**
- * Dynamic configuration
+ * Dynamic Configuration
+ * <br/>
+ * From the use scenario internally in framework, there're mainly three kinds
of methods:
+ * <ul>
+ * <li>1. getConfig, get governance rules or single config item from
Config Center.</li>
+ * <li>2. getConfigFile, get configuration file from Config Center at
start up.</li>
+ * <li>3. addListener/removeListener, add or remove listeners for
governance rules or config items that need to watch.</li>
+ * </ul>
*/
public interface DynamicConfiguration extends Configuration {
String DEFAULT_GROUP = "dubbo";
@@ -78,7 +85,7 @@ public interface DynamicConfiguration extends Configuration {
* @return target configuration mapped to the given key
*/
default String getConfig(String key) {
- return getConfig(key, null, 0L);
+ return getConfig(key, null, -1L);
}
/**
@@ -89,7 +96,7 @@ public interface DynamicConfiguration extends Configuration {
* @return target configuration mapped to the given key and the given group
*/
default String getConfig(String key, String group) {
- return getConfig(key, group, 0L);
+ return getConfig(key, group, -1L);
}
/**
@@ -105,6 +112,22 @@ public interface DynamicConfiguration extends
Configuration {
String getConfig(String key, String group, long timeout) throws
IllegalStateException;
/**
+ * {@see #getConfig(String, String, long)}
+ *
+ * This method are mostly used to get a compound config file, such as a
complete dubbo.properties file.
+ */
+ default String getConfigs(String key, String group) throws
IllegalStateException {
+ return getConfigs(key, group, -1L);
+ }
+
+ /**
+ * {@see #getConfig(String, String, long)}
+ *
+ * This method are mostly used to get a compound config file, such as a
complete dubbo.properties file.
+ */
+ String getConfigs(String key, String group, long timeout) throws
IllegalStateException;
+
+ /**
* Find DynamicConfiguration instance
*
* @return DynamicConfiguration instance
diff --git
a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
index baa6f16..dbb91fd 100644
---
a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
@@ -50,4 +50,9 @@ public class NopDynamicConfiguration implements
DynamicConfiguration {
public String getConfig(String key, String group, long timeout) throws
IllegalStateException {
return null;
}
+
+ @Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ return null;
+ }
}
diff --git
a/dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfiguration.java
index ecc939f..05ce68b 100644
---
a/dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfiguration.java
@@ -46,4 +46,9 @@ public class MockDynamicConfiguration implements
DynamicConfiguration {
public String getConfig(String key, String group, long timeout) throws
IllegalStateException {
return null;
}
+
+ @Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ return null;
+ }
}
diff --git
a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
index b89477b..120e025 100644
---
a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
@@ -27,7 +27,9 @@ import org.apache.dubbo.configcenter.DynamicConfiguration;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigChangeListener;
+import com.ctrip.framework.apollo.ConfigFile;
import com.ctrip.framework.apollo.ConfigService;
+import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.enums.ConfigSourceType;
import com.ctrip.framework.apollo.enums.PropertyChangeType;
import com.ctrip.framework.apollo.model.ConfigChange;
@@ -41,10 +43,10 @@ import java.util.concurrent.CopyOnWriteArraySet;
import java.util.stream.Collectors;
import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE;
+import static
org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
import static
org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_CHECK_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_CLUSTER_KEY;
-import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_GROUP_KEY;
import static
org.apache.dubbo.common.constants.ConfigConstants.CONFIG_NAMESPACE_KEY;
/**
@@ -56,9 +58,11 @@ public class ApolloDynamicConfiguration implements
DynamicConfiguration {
private static final String APOLLO_ADDR_KEY = "apollo.meta";
private static final String APOLLO_CLUSTER_KEY = "apollo.cluster";
private static final String APOLLO_PROTOCOL_PREFIX = "http://";
+ private static final String APOLLO_APPLICATION_KEY = "application";
private URL url;
private Config dubboConfig;
+ private ConfigFile dubboConfigFile;
private ConcurrentMap<String, ApolloListener> listeners = new
ConcurrentHashMap<>();
ApolloDynamicConfiguration(URL url) {
@@ -78,6 +82,7 @@ public class ApolloDynamicConfiguration implements
DynamicConfiguration {
}
dubboConfig =
ConfigService.getConfig(url.getParameter(CONFIG_NAMESPACE_KEY, DEFAULT_GROUP));
+ dubboConfigFile =
ConfigService.getConfigFile(url.getParameter(CONFIG_NAMESPACE_KEY,
DEFAULT_GROUP), ConfigFileFormat.Properties);
// Decide to fail or to continue when failed to connect to remote
server.
boolean check = url.getParameter(CONFIG_CHECK_KEY, true);
if (dubboConfig.getSourceType() != ConfigSourceType.REMOTE) {
@@ -136,13 +141,32 @@ public class ApolloDynamicConfiguration implements
DynamicConfiguration {
*/
@Override
public String getConfig(String key, String group, long timeout) throws
IllegalStateException {
- if (StringUtils.isNotEmpty(group) &&
!url.getParameter(CONFIG_GROUP_KEY, DEFAULT_GROUP).equals(group)) {
- Config config = ConfigService.getAppConfig();
- return config.getProperty(key, null);
+ if (StringUtils.isNotEmpty(group)) {
+ if (group.equals(url.getParameter(APPLICATION_KEY))) {
+ return ConfigService.getAppConfig().getProperty(key, null);
+ } else {
+ return ConfigService.getConfig(group).getProperty(key, null);
+ }
}
return dubboConfig.getProperty(key, null);
}
+ @Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ if(StringUtils.isEmpty(group)) {
+ return dubboConfigFile.getContent();
+ }
+ if (group.equals(url.getParameter(APPLICATION_KEY))) {
+ return ConfigService.getConfigFile(APOLLO_APPLICATION_KEY,
ConfigFileFormat.Properties).getContent();
+ }
+
+ ConfigFile configFile = ConfigService.getConfigFile(group,
ConfigFileFormat.Properties);
+ if (configFile == null) {
+ throw new IllegalStateException("There is no namespace named " +
group + " in Apollo.");
+ }
+ return configFile.getContent();
+ }
+
/**
* This method will be used by Configuration to get valid value at runtime.
* The group is expected to be 'app level', which can be fetched from the
'config.appnamespace' in url if necessary.
diff --git
a/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java
index 6727ed4..bdf337f 100644
---
a/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java
@@ -104,6 +104,11 @@ public class ConsulDynamicConfiguration implements
DynamicConfiguration {
}
@Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ return getConfig(key, group, timeout);
+ }
+
+ @Override
public Object getInternalProperty(String key) {
logger.info("get config from: " + key);
Response<GetValue> response = getValue(key);
diff --git
a/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java
index 78f5242..2e373ed 100644
---
a/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-etcd/src/main/java/org/apache/dubbo/configcenter/support/etcd/EtcdDynamicConfiguration.java
@@ -107,6 +107,11 @@ public class EtcdDynamicConfiguration implements
DynamicConfiguration {
}
@Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ return getConfig(key, group, timeout);
+ }
+
+ @Override
public Object getInternalProperty(String key) {
return etcdClient.getKVValue(key);
}
diff --git
a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
index afdc97f..5f9307a 100644
---
a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
@@ -202,6 +202,11 @@ public class NacosDynamicConfiguration implements
DynamicConfiguration {
}
@Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ return getConfig(key, group, timeout);
+ }
+
+ @Override
public Object getInternalProperty(String key) {
try {
String[] keyAndGroup = getKeyAndGroup(key);
diff --git
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
index 2ee6426..c912add 100644
---
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
+++
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
@@ -110,4 +110,18 @@ public class ZookeeperDynamicConfiguration implements
DynamicConfiguration {
return (String) getInternalProperty(rootPath + "/" + key);
}
+
+ /**
+ * For zookeeper, {@link #getConfig(String, String, long)} and {@link
#getConfigs(String, String, long)} have the same meaning.
+ *
+ * @param key
+ * @param group
+ * @param timeout
+ * @return
+ * @throws IllegalStateException
+ */
+ @Override
+ public String getConfigs(String key, String group, long timeout) throws
IllegalStateException {
+ return (String) getConfig(key, group, timeout);
+ }
}
diff --git
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java
index 40f9f04..64e0bec 100644
---
a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java
+++
b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java
@@ -87,7 +87,7 @@ public class ZookeeperDynamicConfigurationTest {
@Test
public void testGetConfig() throws Exception {
Assertions.assertEquals("Never change value from configurators",
configuration.getConfig("never.change.DemoService.configurators"));
- Assertions.assertEquals("The content from dubbo.properties",
configuration.getConfig("dubbo.properties", "dubbo"));
+ Assertions.assertEquals("The content from dubbo.properties",
configuration.getConfigs("dubbo.properties", "dubbo"));
}
@Test