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 2023/12/31 12:07:37 UTC
(camel-spring-boot) branch main updated: CAMEL-19749: Add variables as concept to Camel
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
The following commit(s) were added to refs/heads/main by this push:
new 671e772eb22 CAMEL-19749: Add variables as concept to Camel
671e772eb22 is described below
commit 671e772eb2240ff0e4537f5e5d4330714cb73f24
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Dec 31 13:06:25 2023 +0100
CAMEL-19749: Add variables as concept to Camel
---
.../camel/spring/boot/CamelAutoConfiguration.java | 55 +++++++++++++++++++++-
1 file changed, 54 insertions(+), 1 deletion(-)
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java
index 2934b2a00c0..f49794f995a 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java
@@ -16,8 +16,10 @@
*/
package org.apache.camel.spring.boot;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -38,13 +40,19 @@ import org.apache.camel.spi.CliConnectorFactory;
import org.apache.camel.spi.PackageScanClassResolver;
import org.apache.camel.spi.PackageScanResourceResolver;
import org.apache.camel.spi.StartupStepRecorder;
+import org.apache.camel.spi.VariableRepository;
+import org.apache.camel.spi.VariableRepositoryFactory;
import org.apache.camel.spring.boot.aot.CamelRuntimeHints;
import org.apache.camel.spring.spi.ApplicationContextBeanRepository;
import org.apache.camel.spring.spi.CamelBeanPostProcessor;
import org.apache.camel.support.DefaultRegistry;
+import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.support.ResourceHelper;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.startup.LoggingStartupStepRecorder;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
@@ -61,12 +69,13 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Role;
import org.springframework.core.OrderComparator;
import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MutablePropertySources;
@ImportRuntimeHints(CamelRuntimeHints.class)
@Configuration(proxyBeanMethods = false)
-@EnableConfigurationProperties(CamelConfigurationProperties.class)
+@EnableConfigurationProperties({CamelConfigurationProperties.class})
@Import(TypeConversionConfiguration.class)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public class CamelAutoConfiguration {
@@ -136,6 +145,32 @@ public class CamelAutoConfiguration {
}
}
+ // configure camel.variable.xx configurations
+ Environment env = applicationContext.getEnvironment();
+ if (env instanceof ConfigurableEnvironment cev) {
+ Map<String, String> vars = doExtractVariablesFromSpringBoot(cev);
+ if (!vars.isEmpty()) {
+ // set variables
+ for (String key : vars.keySet()) {
+ String value = vars.get(key);
+ String id = StringHelper.before(key, ":", "global");
+ key = StringHelper.after(key, ":", key);
+ VariableRepository repo = camelContext.getCamelContextExtension().getContextPlugin(VariableRepositoryFactory.class)
+ .getVariableRepository(id);
+ // it may be a resource to load from disk then
+ if (value.startsWith(LanguageSupport.RESOURCE)) {
+ value = value.substring(9);
+ if (ResourceHelper.hasScheme(value)) {
+ InputStream is = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, value);
+ value = IOHelper.loadText(is);
+ IOHelper.close(is);
+ }
+ }
+ repo.setVariable(key, value);
+ }
+ }
+ }
+
// setup cli connector eager
configureCliConnector(applicationContext, camelContext);
@@ -157,6 +192,24 @@ public class CamelAutoConfiguration {
return camelContext;
}
+ protected static Map<String, String> doExtractVariablesFromSpringBoot(ConfigurableEnvironment env) {
+ Map<String, String> answer = new LinkedHashMap<>();
+
+ // grab all variables
+ env.getPropertySources().forEach(ps -> {
+ if (ps instanceof EnumerablePropertySource eps) {
+ for (String n : eps.getPropertyNames()) {
+ if (n.startsWith("camel.variable.")) {
+ String v = env.getRequiredProperty(n);
+ n = n.substring(15);
+ answer.put(n, v);
+ }
+ }
+ }});
+
+ return answer;
+ }
+
static void configureCliConnector(ApplicationContext applicationContext,
CamelContext camelContext) {