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/08/12 09:57:32 UTC
[camel] 03/07: CAMEL-13856: camel-microprofile-config: sould have
an option to enable/disable automatic lookup of properties sources
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 91c40c941d706f06aeac27fb685205c7900ec8c1
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Mon Aug 12 06:54:08 2019 +0200
CAMEL-13856: camel-microprofile-config: sould have an option to enable/disable automatic lookup of properties sources
---
.../src/main/docs/properties-component.adoc | 3 +-
.../component/properties/PropertiesComponent.java | 55 ++++++++++++++--------
.../PropertiesComponentPropertiesSourceTest.java | 33 +++++++++++--
.../PropertiesComponentConfiguration.java | 14 ++++++
4 files changed, 79 insertions(+), 26 deletions(-)
diff --git a/components/camel-properties/src/main/docs/properties-component.adoc b/components/camel-properties/src/main/docs/properties-component.adoc
index 71bdf2e..83dbb0a 100644
--- a/components/camel-properties/src/main/docs/properties-component.adoc
+++ b/components/camel-properties/src/main/docs/properties-component.adoc
@@ -15,7 +15,7 @@ Where *key* is the key for the property to lookup
== Options
// component options: START
-The Properties component supports 12 options, which are listed below.
+The Properties component supports 13 options, which are listed below.
@@ -32,6 +32,7 @@ The Properties component supports 12 options, which are listed below.
| *overrideProperties* (advanced) | Sets a special list of override properties that take precedence and will use first, if a property exist. | | Properties
| *systemPropertiesMode* (common) | Sets the JVM system property mode (0 = never, 1 = fallback, 2 = override). The default mode (override) is to use system properties if present, and override any existing properties. OS environment variable mode is checked before JVM system property mode | 2 | int
| *environmentVariableMode* (common) | Sets the OS environment variables mode (0 = never, 1 = fallback, 2 = override). The default mode (override) is to use OS environment variables if present, and override any existing properties. OS environment variable mode is checked before JVM system property mode | 2 | int
+| *autoDiscoverProperties Sources* (common) | Whether to automatically discovery instances of PropertiesSource from registry and service factory. | true | boolean
| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
diff --git a/components/camel-properties/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java b/components/camel-properties/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java
index 42ba34c..260309d 100644
--- a/components/camel-properties/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java
+++ b/components/camel-properties/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java
@@ -122,6 +122,9 @@ public class PropertiesComponent extends DefaultComponent implements org.apache.
private int systemPropertiesMode = SYSTEM_PROPERTIES_MODE_OVERRIDE;
@Metadata(defaultValue = "" + ENVIRONMENT_VARIABLES_MODE_OVERRIDE, enums = "0,1,2")
private int environmentVariableMode = ENVIRONMENT_VARIABLES_MODE_OVERRIDE;
+ @Metadata(defaultValue = "true")
+ private boolean autoDiscoverPropertiesSources = true;
+
public PropertiesComponent() {
super();
@@ -438,6 +441,16 @@ public class PropertiesComponent extends DefaultComponent implements org.apache.
public void setEnvironmentVariableMode(int environmentVariableMode) {
this.environmentVariableMode = environmentVariableMode;
}
+ public boolean isAutoDiscoverPropertiesSources() {
+ return autoDiscoverPropertiesSources;
+ }
+
+ /**
+ * Whether to automatically discovery instances of {@link PropertiesSource} from registry and service factory.
+ */
+ public void setAutoDiscoverPropertiesSources(boolean autoDiscoverPropertiesSources) {
+ this.autoDiscoverPropertiesSources = autoDiscoverPropertiesSources;
+ }
@Override
public void addPropertiesSource(PropertiesSource propertiesSource) {
@@ -459,29 +472,31 @@ public class PropertiesComponent extends DefaultComponent implements org.apache.
protected void doInit() throws Exception {
super.doInit();
- // discover any 3rd party properties sources
- try {
- for (PropertiesSource source: getCamelContext().getRegistry().findByType(PropertiesSource.class)) {
- addPropertiesSource(source);
- LOG.info("PropertiesComponent added custom PropertiesSource (registry): {}", source);
- }
+ if (isAutoDiscoverPropertiesSources()) {
+ // discover any 3rd party properties sources
+ try {
+ for (PropertiesSource source : getCamelContext().getRegistry().findByType(PropertiesSource.class)) {
+ addPropertiesSource(source);
+ LOG.info("PropertiesComponent added custom PropertiesSource (registry): {}", source);
+ }
- FactoryFinder factoryFinder = getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder("META-INF/services/org/apache/camel/");
- Class<?> type = factoryFinder.findClass("properties-source-factory").orElse(null);
- if (type != null) {
- Object obj = getCamelContext().getInjector().newInstance(type, false);
- if (obj instanceof PropertiesSource) {
- PropertiesSource ps = (PropertiesSource) obj;
- addPropertiesSource(ps);
- LOG.info("PropertiesComponent added custom PropertiesSource (factory): {}", ps);
- } else if (obj != null) {
- LOG.warn("PropertiesComponent cannot add custom PropertiesSource as the type is not a org.apache.camel.component.properties.PropertiesSource but: " + type.getName());
+ FactoryFinder factoryFinder = getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder("META-INF/services/org/apache/camel/");
+ Class<?> type = factoryFinder.findClass("properties-source-factory").orElse(null);
+ if (type != null) {
+ Object obj = getCamelContext().getInjector().newInstance(type, false);
+ if (obj instanceof PropertiesSource) {
+ PropertiesSource ps = (PropertiesSource) obj;
+ addPropertiesSource(ps);
+ LOG.info("PropertiesComponent added custom PropertiesSource (factory): {}", ps);
+ } else if (obj != null) {
+ LOG.warn("PropertiesComponent cannot add custom PropertiesSource as the type is not a org.apache.camel.component.properties.PropertiesSource but: " + type.getName());
+ }
}
+ } catch (NoFactoryAvailableException e) {
+ // ignore
+ } catch (Exception e) {
+ LOG.debug("Error discovering and using custom PropertiesSource due to " + e.getMessage() + ". This exception is ignored", e);
}
- } catch (NoFactoryAvailableException e) {
- // ignore
- } catch (Exception e) {
- LOG.debug("Error discovering and using custom PropertiesSource due to " + e.getMessage() + ". This exception is ignored", e);
}
ServiceHelper.initService(sources);
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentPropertiesSourceTest.java b/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentPropertiesSourceTest.java
index 77aa267..4ddb75b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentPropertiesSourceTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentPropertiesSourceTest.java
@@ -18,19 +18,42 @@ package org.apache.camel.component.properties;
import java.util.Properties;
-import org.apache.camel.ContextTestSupport;
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.spi.PropertiesSource;
import org.junit.Test;
-public class PropertiesComponentPropertiesSourceTest extends ContextTestSupport {
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class PropertiesComponentPropertiesSourceTest {
@Test
public void testPropertiesSourceFromRegistry() {
+ CamelContext context = new DefaultCamelContext();
context.getRegistry().bind("my-ps-1", new PropertiesPropertiesSource("ps1", "my-key-1", "my-val-1"));
context.getRegistry().bind("my-ps-2", new PropertiesPropertiesSource("ps2", "my-key-2", "my-val-2"));
- context.start();
- assertEquals("my-val-1", context.resolvePropertyPlaceholders("{{my-key-1}}"));
- assertEquals("my-val-2", context.resolvePropertyPlaceholders("{{my-key-2}}"));
+ assertThat(context.resolvePropertyPlaceholders("{{my-key-1}}")).isEqualTo("my-val-1");
+ assertThat(context.resolvePropertyPlaceholders("{{my-key-2}}")).isEqualTo("my-val-2");
+ }
+
+ @Test
+ public void testDisablePropertiesSourceDiscovery() {
+ PropertiesComponent pc = new PropertiesComponent();
+ pc.setAutoDiscoverPropertiesSources(false);
+
+ CamelContext context = new DefaultCamelContext();
+ context.addComponent("properties", pc);
+ context.getRegistry().bind("my-ps-1", new PropertiesPropertiesSource("ps1", "my-key-1", "my-val-1"));
+ context.getRegistry().bind("my-ps-2", new PropertiesPropertiesSource("ps2", "my-key-2", "my-val-2"));
+
+ assertThatThrownBy(() -> context.resolvePropertyPlaceholders("{{my-key-1}}"))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessage("Property with key [my-key-1] not found in properties from text: {{my-key-1}}");
+
+ assertThatThrownBy(() -> context.resolvePropertyPlaceholders("{{my-key-2}}"))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessage("Property with key [my-key-2] not found in properties from text: {{my-key-2}}");
}
private static final class PropertiesPropertiesSource extends Properties implements PropertiesSource {
diff --git a/platforms/spring-boot/components-starter/camel-properties-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-properties-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java
index 2749c5c..2218e81 100644
--- a/platforms/spring-boot/components-starter/camel-properties-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-properties-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java
@@ -98,6 +98,11 @@ public class PropertiesComponentConfiguration
*/
private Integer environmentVariableMode = 2;
/**
+ * Whether to automatically discovery instances of PropertiesSource from
+ * registry and service factory.
+ */
+ private Boolean autoDiscoverPropertiesSources = true;
+ /**
* Whether the component should resolve property placeholders on itself when
* starting. Only properties which are of String type can use property
* placeholders.
@@ -189,6 +194,15 @@ public class PropertiesComponentConfiguration
this.environmentVariableMode = environmentVariableMode;
}
+ public Boolean getAutoDiscoverPropertiesSources() {
+ return autoDiscoverPropertiesSources;
+ }
+
+ public void setAutoDiscoverPropertiesSources(
+ Boolean autoDiscoverPropertiesSources) {
+ this.autoDiscoverPropertiesSources = autoDiscoverPropertiesSources;
+ }
+
public Boolean getResolvePropertyPlaceholders() {
return resolvePropertyPlaceholders;
}