You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/06/26 12:46:33 UTC
[camel] 01/07: CAMEL-13681: camel-main - Allow ENV variables to
configure any option
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 68a93674a82e01b1d0c0312ff5998c05de94b8ae
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Jun 25 15:58:46 2019 +0200
CAMEL-13681: camel-main - Allow ENV variables to configure any option
---
.../properties/DefaultPropertiesParser.java | 18 +-----
.../java/org/apache/camel/main/MainSupport.java | 71 ++++++++++++++++++++--
.../main/java/org/apache/camel/util/IOHelper.java | 16 +++++
3 files changed, 83 insertions(+), 22 deletions(-)
diff --git a/components/camel-properties/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java b/components/camel-properties/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java
index bc78cb5..f035912 100644
--- a/components/camel-properties/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java
+++ b/components/camel-properties/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java
@@ -25,6 +25,8 @@ import org.apache.camel.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.camel.util.IOHelper.lookupEnvironmentVariable;
+
/**
* A parser to parse a string which contains property placeholders.
*/
@@ -350,22 +352,6 @@ public class DefaultPropertiesParser implements AugmentedPropertyNameAwareProper
}
/**
- * Lookup the OS environment variable in a safe manner by
- * using upper case keys and underscore instead of dash.
- */
- private static String lookupEnvironmentVariable(String key) {
- // lookup OS env with upper case key
- String upperKey = key.toUpperCase();
- String value = System.getenv(upperKey);
- // some OS do not support dashes in keys, so replace with underscore
- if (value == null) {
- String noDashKey = upperKey.replace('-', '_');
- value = System.getenv(noDashKey);
- }
- return value;
- }
-
- /**
* This inner class is the definition of a property used in a string
*/
private static final class Property {
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java
index 9e8ebf1..3f80690 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
@@ -62,6 +63,7 @@ import org.slf4j.LoggerFactory;
import static org.apache.camel.support.ObjectHelper.invokeMethod;
import static org.apache.camel.util.ReflectionHelper.findMethod;
+import static org.apache.camel.util.StringHelper.dashToCamelCase;
import static org.apache.camel.util.StringHelper.matches;
/**
@@ -855,9 +857,44 @@ public abstract class MainSupport extends ServiceSupport {
}
}
+ protected Properties loadEnvironmentVariablesAsProperties(String[] prefixes) {
+ Properties answer = new OrderedProperties();
+ if (prefixes == null || prefixes.length == 0) {
+ return answer;
+ }
+
+ for (String prefix : prefixes) {
+ final String pk = prefix.toUpperCase(Locale.US).replaceAll("[^\\w]", "-");
+ final String pk2 = pk.replace('-', '_');
+ System.getenv().forEach((k, v) -> {
+ k = k.toUpperCase(Locale.US);
+ if (k.startsWith(pk) || k.startsWith(pk2)) {
+ String key = k.toLowerCase(Locale.US).replace('_', '.');
+ answer.put(key, v);
+ }
+ });
+ }
+
+ return answer;
+ }
+
protected void autoConfigurationPropertiesComponent(CamelContext camelContext) throws Exception {
// load properties
Properties prop = camelContext.getPropertiesComponent().loadProperties();
+ LOG.debug("Properties from Camel properties component:");
+ for (String key : prop.stringPropertyNames()) {
+ LOG.debug(" {}={}", key, prop.getProperty(key));
+ }
+
+ // load properties from ENV (override existing)
+ Properties propENV = loadEnvironmentVariablesAsProperties(new String[]{"camel.component.properties."});
+ if (!propENV.isEmpty()) {
+ prop.putAll(propENV);
+ LOG.debug("Properties from OS environment variables:");
+ for (String key : propENV.stringPropertyNames()) {
+ LOG.debug(" {}={}", key, propENV.getProperty(key));
+ }
+ }
Map<Object, Map<String, Object>> properties = new LinkedHashMap<>();
@@ -890,6 +927,20 @@ public abstract class MainSupport extends ServiceSupport {
protected void autoConfigurationMainConfiguration(CamelContext camelContext, MainConfigurationProperties config) throws Exception {
// load properties
Properties prop = camelContext.getPropertiesComponent().loadProperties();
+ LOG.debug("Properties from Camel properties component:");
+ for (String key : prop.stringPropertyNames()) {
+ LOG.debug(" {}={}", key, prop.getProperty(key));
+ }
+
+ // load properties from ENV (override existing)
+ Properties propENV = loadEnvironmentVariablesAsProperties(new String[]{"camel.main."});
+ if (!propENV.isEmpty()) {
+ prop.putAll(propENV);
+ LOG.debug("Properties from OS environment variables:");
+ for (String key : propENV.stringPropertyNames()) {
+ LOG.debug(" {}={}", key, propENV.getProperty(key));
+ }
+ }
Map<String, Object> properties = new LinkedHashMap<>();
@@ -932,13 +983,21 @@ public abstract class MainSupport extends ServiceSupport {
// ignore as this file is optional
}
- // load properties from properties component
+ // load properties from properties component (override existing)
Properties propPC = camelContext.getPropertiesComponent().loadProperties();
- if (propPC != null) {
- prop.putAll(propPC);
- LOG.debug("Properties from Camel properties component:");
- for (String key : propPC.stringPropertyNames()) {
- LOG.debug(" {}={}", key, propPC.getProperty(key));
+ prop.putAll(propPC);
+ LOG.debug("Properties from Camel properties component:");
+ for (String key : propPC.stringPropertyNames()) {
+ LOG.debug(" {}={}", key, propPC.getProperty(key));
+ }
+
+ // load properties from ENV (override existing)
+ Properties propENV = loadEnvironmentVariablesAsProperties(new String[]{"camel.component.", "camel.dataformat.", "camel.language."});
+ if (!propENV.isEmpty()) {
+ prop.putAll(propENV);
+ LOG.debug("Properties from OS environment variables:");
+ for (String key : propENV.stringPropertyNames()) {
+ LOG.debug(" {}={}", key, propENV.getProperty(key));
}
}
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
index ee52b06..565b54c 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
@@ -519,6 +519,22 @@ public final class IOHelper {
}
/**
+ * Lookup the OS environment variable in a safe manner by
+ * using upper case keys and underscore instead of dash.
+ */
+ public static String lookupEnvironmentVariable(String key) {
+ // lookup OS env with upper case key
+ String upperKey = key.toUpperCase();
+ String value = System.getenv(upperKey);
+ // some OS do not support dashes in keys, so replace with underscore
+ if (value == null) {
+ String noDashKey = upperKey.replace('-', '_');
+ value = System.getenv(noDashKey);
+ }
+ return value;
+ }
+
+ /**
* Encoding-aware input stream.
*/
public static class EncodingInputStream extends InputStream {