This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch dev-metadata in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 60b13428a0d79af759dc0221b9c8b5dc96c7c7df Author: ken.lj <[email protected]> AuthorDate: Tue Nov 13 10:40:43 2018 +0800 support accepting external configuration from application. --- .../apache/dubbo/config/ConfigCenterConfig.java | 2 +- .../dubbo/config/spring/ConfigCenterBean.java | 29 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) 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 50b7699..08e9db6 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 @@ -114,7 +114,7 @@ public class ConfigCenterConfig extends AbstractConfig { return appname; } - private Map<String, String> parseProperties(String content) throws IOException { + protected Map<String, String> parseProperties(String content) throws IOException { Map<String, String> map = new HashMap<>(); if (content == null) { logger.warn("You specified the config centre, but there's not even one single config item in it."); 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 aa88eaf..653a2f5 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 @@ -24,7 +24,10 @@ 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; +import org.springframework.core.env.Environment; +import java.util.HashMap; import java.util.Map; /** @@ -33,10 +36,12 @@ import java.util.Map; * * 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 { +public class ConfigCenterBean extends ConfigCenterConfig implements InitializingBean, ApplicationContextAware, DisposableBean, EnvironmentAware { private transient ApplicationContext applicationContext; + private boolean auto = false; + @Override public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; @@ -63,11 +68,31 @@ public class ConfigCenterBean extends ConfigCenterConfig implements Initializing } } - this.init(); + if (!auto) { + this.init(); + } } @Override public void destroy() throws Exception { } + + @Override + public void setEnvironment(Environment environment) { + if (auto) { + Object rawProperties = environment.getProperty("dubbo.properties", Object.class); + Map<String, String> externalProperties = new HashMap<>(); + try { + if (rawProperties instanceof Map) { + externalProperties = (Map<String, String>) rawProperties; + } else if (rawProperties instanceof String) { + externalProperties = parseProperties((String) rawProperties); + } + org.apache.dubbo.config.context.Environment.getInstance().updateExternalConfigurationMap(externalProperties); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + } }
