Skip to content

Commit 4de0a7b

Browse files
authored
CAMEL-23858: camel-spring-boot - Configuring camel.main.profile should be supported (#1832)
1 parent d5d0a40 commit 4de0a7b

5 files changed

Lines changed: 49 additions & 0 deletions

File tree

core/camel-spring-boot/src/main/docs/spring-boot.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,12 @@
852852
"sourceType": "org.apache.camel.spring.boot.CamelConfigurationProperties$Main",
853853
"defaultValue": 1000
854854
},
855+
{
856+
"name": "camel.main.profile",
857+
"type": "java.lang.String",
858+
"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.",
859+
"sourceType": "org.apache.camel.spring.boot.CamelConfigurationProperties$Main"
860+
},
855861
{
856862
"name": "camel.main.route-filter-exclude-pattern",
857863
"type": "java.lang.String",

core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelAutoConfiguration.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.camel.main.DebuggerConfigurationProperties;
3838
import org.apache.camel.main.DefaultConfigurationConfigurer;
3939
import org.apache.camel.main.MainListener;
40+
import org.apache.camel.main.ProfileConfigurer;
4041
import org.apache.camel.main.RoutesCollector;
4142
import org.apache.camel.main.fatjar.FatJarPackageScanClassResolver;
4243
import org.apache.camel.main.fatjar.FatJarPackageScanResourceResolver;
@@ -216,6 +217,11 @@ public static CamelContext doConfigureCamelContext(ApplicationContext applicatio
216217
config.getMain().getRouteFilterIncludePattern(), config.getMain().getRouteFilterExcludePattern());
217218
}
218219

220+
// configure profile (dev/prod) defaults before applying main configuration,
221+
// so that profile defaults are set but user-explicit properties take precedence
222+
Properties autoConfigured = doExtractCamelMainProperties(applicationContext);
223+
ProfileConfigurer.configureCommon(camelContext, config.getMain().getProfile(), config.getMain(), autoConfigured);
224+
219225
// configure the common/default options
220226
DefaultConfigurationConfigurer.configure(camelContext, config.getMain());
221227
// lookup and configure SPI beans
@@ -230,6 +236,27 @@ public static CamelContext doConfigureCamelContext(ApplicationContext applicatio
230236
return camelContext;
231237
}
232238

239+
/**
240+
* Collect all camel.main.* property names that the user has explicitly configured
241+
* so that ProfileConfigurer does not override them with profile defaults.
242+
*/
243+
protected static Properties doExtractCamelMainProperties(ApplicationContext applicationContext) {
244+
Properties answer = new Properties();
245+
Environment env = applicationContext.getEnvironment();
246+
if (env instanceof ConfigurableEnvironment cev) {
247+
cev.getPropertySources().forEach(ps -> {
248+
if (ps instanceof EnumerablePropertySource<?> eps) {
249+
for (String n : eps.getPropertyNames()) {
250+
if (n.startsWith("camel.main.")) {
251+
answer.put(n, cev.getProperty(n, ""));
252+
}
253+
}
254+
}
255+
});
256+
}
257+
return answer;
258+
}
259+
233260
protected static Map<String, String> doExtractVariablesFromSpringBoot(ConfigurableEnvironment env) {
234261
Map<String, String> answer = new LinkedHashMap<>();
235262

core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/errorregistry/CamelErrorRegistryAutoConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public class CamelErrorRegistryAutoConfiguration {
3333

3434
@Bean
3535
public ErrorRegistry errorRegistry(CamelContext camelContext, CamelErrorRegistryConfigurationProperties config) {
36+
// dev profile enables error registry to capture routing errors for tooling (TUI)
37+
if (!config.isEnabled() && "dev".equals(camelContext.getCamelContextExtension().getProfile())) {
38+
config.setEnabled(true);
39+
}
3640
if (!config.isEnabled()) {
3741
return null;
3842
}

core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/security/CamelSecurityPolicyAutoConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ public class CamelSecurityPolicyAutoConfiguration {
5050
SecurityPolicyResult camelSecurityPolicyResult(CamelContext camelContext,
5151
CamelSecurityPolicyConfigurationProperties config, Environment environment) {
5252

53+
// apply profile-based security defaults
54+
String profile = camelContext.getCamelContextExtension().getProfile();
55+
if ("dev".equals(profile) && config.getInsecureDevPolicy() == null) {
56+
config.setInsecureDevPolicy("allow");
57+
} else if ("prod".equals(profile) && "warn".equals(config.getPolicy())) {
58+
config.setPolicy("fail");
59+
}
60+
5361
SecurityConfigurationProperties securityConfig = applySecurityProperties(camelContext, config);
5462

5563
Map<String, Object> camelProperties = extractCamelProperties(environment);

core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/trace/CamelTraceAutoConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ public class CamelTraceAutoConfiguration {
3232
@Bean
3333
public BacklogTracer backlogTracer(CamelContext camelContext, CamelTraceConfigurationProperties config)
3434
throws Exception {
35+
// dev profile enables tracer standby so tooling (TUI) can activate tracing on demand
36+
if (!config.isStandby() && "dev".equals(camelContext.getCamelContextExtension().getProfile())) {
37+
config.setStandby(true);
38+
}
3539
if (!config.isEnabled() && !config.isStandby()) {
3640
return null;
3741
}

0 commit comments

Comments
 (0)