You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/03/29 09:20:52 UTC

[incubator-skywalking] branch master updated: Support setting override through system.properties and envs. (#997)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 9b1c672  Support setting override through system.properties and envs. (#997)
9b1c672 is described below

commit 9b1c6724d21a93f022a79c79bdc3203a59b90e88
Author: 吴晟 Wu Sheng <wu...@foxmail.com>
AuthorDate: Thu Mar 29 17:20:49 2018 +0800

    Support setting override through system.properties and envs. (#997)
    
    * Support setting override through system.properties and envs.
    
    * Remove test case.
---
 .../boot/config/ApplicationConfigLoader.java       | 51 +++++++++++++++++++++-
 1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/apm-collector/apm-collector-boot/src/main/java/org/apache/skywalking/apm/collector/boot/config/ApplicationConfigLoader.java b/apm-collector/apm-collector-boot/src/main/java/org/apache/skywalking/apm/collector/boot/config/ApplicationConfigLoader.java
index 81050ae..902006c 100644
--- a/apm-collector/apm-collector-boot/src/main/java/org/apache/skywalking/apm/collector/boot/config/ApplicationConfigLoader.java
+++ b/apm-collector/apm-collector-boot/src/main/java/org/apache/skywalking/apm/collector/boot/config/ApplicationConfigLoader.java
@@ -16,11 +16,11 @@
  *
  */
 
-
 package org.apache.skywalking.apm.collector.boot.config;
 
 import java.io.FileNotFoundException;
 import java.io.Reader;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 import org.apache.skywalking.apm.collector.core.module.ApplicationConfiguration;
@@ -30,7 +30,13 @@ import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.Yaml;
 
 /**
- * @author peng-yongsheng
+ * Initialize collector settings with following sources.
+ * Use application.yml as primary setting,
+ * and fix missing setting by default settings in application-default.yml.
+ *
+ * At last, override setting by system.properties and system.envs if the key matches moduleName.provideName.settingKey.
+ *
+ * @author peng-yongsheng, wusheng
  */
 public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfiguration> {
 
@@ -42,6 +48,7 @@ public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfigur
         ApplicationConfiguration configuration = new ApplicationConfiguration();
         this.loadConfig(configuration);
         this.loadDefaultConfig(configuration);
+        this.overrideConfigBySystemEnv(configuration);
         return configuration;
     }
 
@@ -94,4 +101,44 @@ public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfigur
             throw new ConfigFileNotFoundException(e.getMessage(), e);
         }
     }
+
+    private void overrideConfigBySystemEnv(ApplicationConfiguration configuration) {
+        Iterator<Map.Entry<Object, Object>> entryIterator = System.getProperties().entrySet().iterator();
+        while (entryIterator.hasNext()) {
+            Map.Entry<Object, Object> prop = entryIterator.next();
+            overrideModuleSettings(configuration, prop.getKey().toString(), prop.getValue().toString(), true);
+        }
+
+        Map<String, String> envs = System.getenv();
+        for (String envKey : envs.keySet()) {
+            overrideModuleSettings(configuration, envKey, envs.get(envKey), false);
+        }
+    }
+
+    private void overrideModuleSettings(ApplicationConfiguration configuration, String key, String value,
+        boolean isSystemProperty) {
+        int moduleAndConfigSeparator = key.indexOf('.');
+        if (moduleAndConfigSeparator <= 0) {
+            return;
+        }
+        String moduleName = key.substring(0, moduleAndConfigSeparator);
+        String providerSettingSubKey = key.substring(moduleAndConfigSeparator + 1);
+        ApplicationConfiguration.ModuleConfiguration moduleConfiguration = configuration.getModuleConfiguration(moduleName);
+        if (moduleConfiguration == null) {
+            return;
+        }
+        int providerAndConfigSeparator = providerSettingSubKey.indexOf('.');
+        if (providerAndConfigSeparator <= 0) {
+            return;
+        }
+        String providerName = providerSettingSubKey.substring(0, providerAndConfigSeparator);
+        String settingKey = providerSettingSubKey.substring(providerAndConfigSeparator + 1);
+        if (!moduleConfiguration.has(providerName)) {
+            return;
+        }
+        Properties providerSettings = moduleConfiguration.getProviderConfiguration(providerName);
+        providerSettings.put(settingKey, value);
+        logger.info("The setting has been override by key: {}, value: {}, in {} provider of {} module through {}",
+            settingKey, value, providerName, moduleName, isSystemProperty ? "System.properties" : "System.envs");
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
wusheng@apache.org.