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);
+            }
+        }
+    }
 }

Reply via email to