You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/09/28 20:43:00 UTC
[jira] [Updated] (CAMEL-25098) camel-main - Bootstrap, profiles and duration options: fix bugs found in a deep review
[ https://issues.apache.org/jira/browse/CAMEL-25098?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-25098:
--------------------------------
Fix Version/s: 4.23.0
> camel-main - Bootstrap, profiles and duration options: fix bugs found in a deep review
> --------------------------------------------------------------------------------------
>
> Key: CAMEL-25098
> URL: https://issues.apache.org/jira/browse/CAMEL-25098
> Project: Camel
> Issue Type: Bug
> Components: camel-main
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.23.0
>
>
> A review of the bootstrap of camel-main found these bugs:
> # The {{dev}} profile overrides an option configured with a key in another case or with dashes, such as the ENV variable {{CAMEL_MAIN_SHUTDOWNTIMEOUT=5}} (which becomes {{camel.main.shutdowntimeout}}), {{CAMEL_MAIN_MESSAGEHISTORY=false}} or {{camel.main.shutdown-timeout}}, as ProfileConfigurer only checks the exact camelCase key.
> # SSL ({{camel.ssl.*}}) is auto-configured twice (a duplicated block in BaseMainSupport), so a self-signed certificate is generated twice and the SSLContextParameters used by the HTTP server is replaced afterwards.
> # {{camel.main.durationMaxSeconds=-1}} with {{durationMaxAction=stop}} is a busy loop, which stops all routes and logs about every millisecond.
> # MainDurationEventNotifier does not stop its idle scheduler thread (a non-daemon thread), so the JVM does not exit when Main is used embedded or in tests.
> # {{camel.main.durationMaxIdleSeconds}} with {{durationMaxAction=stop}} triggers stopping all routes again every second.
> # {{durationMaxAction}} is case-insensitive in one place, but the event notifier only accepts lower case, so {{STOP}} fails with "Unknown action: null".
> # Scanning the routes for modeline (before the routes are loaded) ignores {{camel.main.routesExcludePattern}}, {{routesCollectorEnabled}} and {{routesCollectorIgnoreLoadingError}} from the properties, so an excluded (or broken) route file is still pre-parsed.
> # Main loads the properties file of the profile configured in Java ({{withProfile("dev")}}) together with the profile from {{-Dcamel.main.profile=prod}}, so options of the dev profile leak into prod.
> # Whether a JVM system property overrides the same option from an ENV variable depends on the case of the keys (for example {{CAMEL_MAIN_SHUTDOWNTIMEOUT=11}} and {{-Dcamel.main.shutdownTimeout=22}} gives 11), also for {{autoConfigurationFailFast}}.
> Not changed:
> * ENV variables ending with {{_PORT}} (such as {{CAMEL_SERVER_PORT}}) are ignored, as Kubernetes injects {{<SERVICE>_PORT}} variables for services.
> _Claude Code on behalf of Claus Ibsen_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)