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 33f0f4b7d1396b3bcbd5f85b8561187eb4a3b377 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Jun 17 08:36:25 2019 +0200 CAMEL-13647: Allow to do autowrire by classpath. Quick and dirty prototype. --- .../camel/main/MainConfigurationProperties.java | 4 +-- .../java/org/apache/camel/main/MainSupport.java | 33 ++++++++++++++++++++-- examples/camel-example-main/pom.xml | 11 ++++++++ .../src/main/resources/application.properties | 4 +-- .../src/main/resources/log4j2.properties | 3 ++ 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java index ba00f22..c43ced7 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainConfigurationProperties.java @@ -59,8 +59,8 @@ public class MainConfigurationProperties extends DefaultConfigurationProperties< /** * Whether auto configuration of components/dataformats/languages is enabled or not. * When enabled the configuration parameters are loaded from the properties component - * and configured as defaults (similar to spring-boot auto-configuration). You can prefix - * the parameters in the properties file with: + * and optionally from the classpath file META-INF/services/org/apache/camel/autowire.properties. + * You can prefix the parameters in the properties file with: * - camel.component.name.option1=value1 * - camel.component.name.option2=value2 * - camel.dataformat.name.option1=value1 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 2fe20ef..4e841f3 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 @@ -18,6 +18,7 @@ package org.apache.camel.main; import java.io.File; import java.io.FileInputStream; +import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; @@ -52,7 +53,9 @@ import org.apache.camel.support.PropertyBindingSupport; import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.support.service.ServiceSupport; import org.apache.camel.util.FileUtil; +import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.OrderedProperties; import org.apache.camel.util.concurrent.ThreadHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -897,8 +900,34 @@ public abstract class MainSupport extends ServiceSupport { } protected void autoConfigurationFromProperties(CamelContext camelContext) throws Exception { - // load properties - Properties prop = camelContext.getPropertiesComponent().loadProperties(); + // load optional META-INF/services/org/apache/camel/autowire.properties + Properties prop = new OrderedProperties(); + try { + InputStream is = camelContext.getClassResolver().loadResourceAsStream("/META-INF/services/org/apache/camel/autowire.properties"); + prop.load(is); + if (!prop.isEmpty()) { + LOG.info("Loaded {} properties from classpath: META-INF/services/org/apache/camel/autowire.properties", prop.size()); + if (LOG.isDebugEnabled()) { + LOG.debug("Properties from classpath: META-INF/services/org/apache/camel/autowire.properties:"); + for (String key : prop.stringPropertyNames()) { + LOG.debug(" {}={}", key, prop.getProperty(key)); + } + } + } + IOHelper.close(is); + } catch (Throwable e) { + // ignore as this file is optional + } + + // load properties from properties component + 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)); + } + } Map<Object, Map<String, Object>> properties = new LinkedHashMap<>(); diff --git a/examples/camel-example-main/pom.xml b/examples/camel-example-main/pom.xml index 6a4c5bb..e56f087 100644 --- a/examples/camel-example-main/pom.xml +++ b/examples/camel-example-main/pom.xml @@ -97,6 +97,8 @@ </configuration> </plugin> + <!-- generate autowire.properties file that can automatic detect resources + from the classpath to make convention over configuration for Camel components --> <plugin> <groupId>org.apache.camel</groupId> <artifactId>camel-main-maven-plugin</artifactId> @@ -104,6 +106,15 @@ <configuration> <logClasspath>false</logClasspath> </configuration> + <executions> + <execution> + <id>generate</id> + <goals> + <goal>autowire</goal> + </goals> + <phase>process-classes</phase> + </execution> + </executions> </plugin> </plugins> diff --git a/examples/camel-example-main/src/main/resources/application.properties b/examples/camel-example-main/src/main/resources/application.properties index fb4eb9f..e76d2a2 100644 --- a/examples/camel-example-main/src/main/resources/application.properties +++ b/examples/camel-example-main/src/main/resources/application.properties @@ -42,8 +42,8 @@ camel.component.quartz2.start-delayed-seconds = 3 # you can configure whether OS environment should override (=2 which is default) or as fallback (=1) ### camel.component.properties.environment-variable-mode=1 -camel.component.jms.configuration.connectionFactory=#class:org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory -camel.component.jms.configuration.xxxconnectionFactory.#private#brokerURL=tcp://localhost:61616 +# setup JMS component with connection to ActiveMQ Artemis broker +camel.component.jms.configuration.connectionFactory.#private#brokerURL=tcp://localhost:61616 # properties used in the route myCron = 0/2 * * * * ? diff --git a/examples/camel-example-main/src/main/resources/log4j2.properties b/examples/camel-example-main/src/main/resources/log4j2.properties index d406a9f..d050a4f 100644 --- a/examples/camel-example-main/src/main/resources/log4j2.properties +++ b/examples/camel-example-main/src/main/resources/log4j2.properties @@ -21,3 +21,6 @@ appender.out.layout.type = PatternLayout appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n rootLogger.level = INFO rootLogger.appenderRef.out.ref = out + +logger.camel-main.name = org.apache.camel.main +logger.camel-main.level = DEBUG