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 4de0a7b928f CAMEL-23858: camel-spring-boot - Configuring
camel.main.profile should be supported (#1832)
4de0a7b928f is described below
commit 4de0a7b928f350e8b69920d9808b5b4aa738d716
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Jun 30 09:37:30 2026 +0200
CAMEL-23858: camel-spring-boot - Configuring camel.main.profile should be
supported (#1832)
---
.../src/main/docs/spring-boot.json | 6 +++++
.../camel/spring/boot/CamelAutoConfiguration.java | 27 ++++++++++++++++++++++
.../CamelErrorRegistryAutoConfiguration.java | 4 ++++
.../CamelSecurityPolicyAutoConfiguration.java | 8 +++++++
.../boot/trace/CamelTraceAutoConfiguration.java | 4 ++++
5 files changed, 49 insertions(+)
diff --git a/core/camel-spring-boot/src/main/docs/spring-boot.json
b/core/camel-spring-boot/src/main/docs/spring-boot.json
index cf2734271fe..80b6541d6ca 100644
--- a/core/camel-spring-boot/src/main/docs/spring-boot.json
+++ b/core/camel-spring-boot/src/main/docs/spring-boot.json
@@ -852,6 +852,12 @@
"sourceType":
"org.apache.camel.spring.boot.CamelConfigurationProperties$Main",
"defaultValue": 1000
},
+ {
+ "name": "camel.main.profile",
+ "type": "java.lang.String",
+ "description": "Camel profile to use when running. The dev profile is
for development, which enables a set of additional developer focus
functionality, tracing, debugging, and gathering additional runtime statistics
that are useful during development. However, those additional features has a
slight overhead cost, and are not enabled for production profile. The default
profile is prod.",
+ "sourceType":
"org.apache.camel.spring.boot.CamelConfigurationProperties$Main"
+ },
{
"name": "camel.main.route-filter-exclude-pattern",
"type": "java.lang.String",
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 434c2662288..047af95ba91 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
@@ -37,6 +37,7 @@ import org.apache.camel.component.properties.PropertiesParser;
import org.apache.camel.main.DebuggerConfigurationProperties;
import org.apache.camel.main.DefaultConfigurationConfigurer;
import org.apache.camel.main.MainListener;
+import org.apache.camel.main.ProfileConfigurer;
import org.apache.camel.main.RoutesCollector;
import org.apache.camel.main.fatjar.FatJarPackageScanClassResolver;
import org.apache.camel.main.fatjar.FatJarPackageScanResourceResolver;
@@ -216,6 +217,11 @@ public class CamelAutoConfiguration {
config.getMain().getRouteFilterIncludePattern(),
config.getMain().getRouteFilterExcludePattern());
}
+ // configure profile (dev/prod) defaults before applying main
configuration,
+ // so that profile defaults are set but user-explicit properties take
precedence
+ Properties autoConfigured =
doExtractCamelMainProperties(applicationContext);
+ ProfileConfigurer.configureCommon(camelContext,
config.getMain().getProfile(), config.getMain(), autoConfigured);
+
// configure the common/default options
DefaultConfigurationConfigurer.configure(camelContext,
config.getMain());
// lookup and configure SPI beans
@@ -230,6 +236,27 @@ public class CamelAutoConfiguration {
return camelContext;
}
+ /**
+ * Collect all camel.main.* property names that the user has explicitly
configured
+ * so that ProfileConfigurer does not override them with profile defaults.
+ */
+ protected static Properties
doExtractCamelMainProperties(ApplicationContext applicationContext) {
+ Properties answer = new Properties();
+ Environment env = applicationContext.getEnvironment();
+ if (env instanceof ConfigurableEnvironment cev) {
+ cev.getPropertySources().forEach(ps -> {
+ if (ps instanceof EnumerablePropertySource<?> eps) {
+ for (String n : eps.getPropertyNames()) {
+ if (n.startsWith("camel.main.")) {
+ answer.put(n, cev.getProperty(n, ""));
+ }
+ }
+ }
+ });
+ }
+ return answer;
+ }
+
protected static Map<String, String>
doExtractVariablesFromSpringBoot(ConfigurableEnvironment env) {
Map<String, String> answer = new LinkedHashMap<>();
diff --git
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
index d5dc728314c..401ca4d9690 100644
---
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
+++
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java
@@ -33,6 +33,10 @@ public class CamelErrorRegistryAutoConfiguration {
@Bean
public ErrorRegistry errorRegistry(CamelContext camelContext,
CamelErrorRegistryConfigurationProperties config) {
+ // dev profile enables error registry to capture routing errors for
tooling (TUI)
+ if (!config.isEnabled() &&
"dev".equals(camelContext.getCamelContextExtension().getProfile())) {
+ config.setEnabled(true);
+ }
if (!config.isEnabled()) {
return null;
}
diff --git
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
index 984c010961a..909287d45c7 100644
---
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
+++
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java
@@ -50,6 +50,14 @@ public class CamelSecurityPolicyAutoConfiguration {
SecurityPolicyResult camelSecurityPolicyResult(CamelContext camelContext,
CamelSecurityPolicyConfigurationProperties config, Environment
environment) {
+ // apply profile-based security defaults
+ String profile = camelContext.getCamelContextExtension().getProfile();
+ if ("dev".equals(profile) && config.getInsecureDevPolicy() == null) {
+ config.setInsecureDevPolicy("allow");
+ } else if ("prod".equals(profile) &&
"warn".equals(config.getPolicy())) {
+ config.setPolicy("fail");
+ }
+
SecurityConfigurationProperties securityConfig =
applySecurityProperties(camelContext, config);
Map<String, Object> camelProperties =
extractCamelProperties(environment);
diff --git
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
index c3d3f3b0b34..9c03a19d5ba 100644
---
a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
+++
b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java
@@ -32,6 +32,10 @@ public class CamelTraceAutoConfiguration {
@Bean
public BacklogTracer backlogTracer(CamelContext camelContext,
CamelTraceConfigurationProperties config)
throws Exception {
+ // dev profile enables tracer standby so tooling (TUI) can activate
tracing on demand
+ if (!config.isStandby() &&
"dev".equals(camelContext.getCamelContextExtension().getProfile())) {
+ config.setStandby(true);
+ }
if (!config.isEnabled() && !config.isStandby()) {
return null;
}