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 2020/05/08 20:19:16 UTC
[camel-spring-boot] branch master updated: CAMEL-15032:
SupervisingRouteController - Make it simpler and unify across runtimes
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-spring-boot.git
The following commit(s) were added to refs/heads/master by this push:
new 280d30e CAMEL-15032: SupervisingRouteController - Make it simpler and unify across runtimes
280d30e is described below
commit 280d30e743d1f2f969ee09c071a8371114bee613
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri May 8 22:18:56 2020 +0200
CAMEL-15032: SupervisingRouteController - Make it simpler and unify across runtimes
---
.../spring/boot/CamelConfigurationProperties.java | 54 +++++++
...upervisingRouteControllerAutoConfiguration.java | 93 -----------
.../SupervisingRouteControllerConfiguration.java | 179 ---------------------
.../src/main/resources/META-INF/spring.factories | 1 -
.../SupervisingRouteControllerRestartTest.java | 33 +---
.../boot/SupervisingRouteControllerTest.java | 53 ++----
.../main/java/sample/camel/ApplicationRoutes.java | 3 -
.../src/main/resources/application.properties | 12 +-
8 files changed, 73 insertions(+), 355 deletions(-)
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
index 82feb76..c2a1439 100644
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
+++ b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelConfigurationProperties.java
@@ -520,6 +520,60 @@ public class CamelConfigurationProperties extends DefaultConfigurationProperties
*/
private String xmlRests = "classpath:camel-rest/*.xml";
+ /**
+ * To enable using supervising route controller which allows Camel to startup
+ * and then the controller takes care of starting the routes in a safe manner.
+ *
+ * This can be used when you want to startup Camel despite a route may otherwise
+ * fail fast during startup and cause Camel to fail to startup as well. By delegating
+ * the route startup to the supervising route controller then its manages the startup
+ * using a background thread. The controller allows to be configured with various
+ * settings to attempt to restart failing routes.
+ */
+ boolean routeControllerEnabled;
+
+ /**
+ * The number of threads used by the route controller scheduled thread pool that are used for restarting
+ * routes. The pool uses 1 thread by default, but you can increase this to allow the controller
+ * to concurrently attempt to restart multiple routes in case more than one route has problems
+ * starting.
+ */
+ int routeControllerThreadPoolSize = 1;
+
+ /**
+ * Initial delay in milli seconds before the route controller starts, after
+ * CamelContext has been started.
+ */
+ long routeControllerInitialDelay;
+
+ /**
+ * Backoff delay in millis when restarting a route that failed to startup.
+ */
+ long routeControllerBackOffDelay = 2000;
+
+ /**
+ * Backoff maximum delay in millis when restarting a route that failed to startup.
+ */
+ long routeControllerBackOffMaxDelay;
+
+ /**
+ * Backoff maximum elapsed time in millis, after which the backoff should be considered
+ * exhausted and no more attempts should be made.
+ */
+ long routeControllerBackOffMaxElapsedTime;
+
+ /**
+ * Backoff maximum number of attempts to restart a route that failed to startup.
+ * When this threshold has been exceeded then the controller will give up
+ * attempting to restart the route, and the route will remain as stopped.
+ */
+ long routeControllerBackOffMaxAttempts;
+
+ /**
+ * Backoff multiplier to use for exponential backoff. This is used to extend the delay
+ * between restart attempts.
+ */
+ double routeControllerBackOffMultiplier = 1.0;
// Getters & setters
// -----------------
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SupervisingRouteControllerAutoConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SupervisingRouteControllerAutoConfiguration.java
deleted file mode 100644
index 210bec1..0000000
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SupervisingRouteControllerAutoConfiguration.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.spring.boot;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import org.apache.camel.catalog.impl.TimePatternConverter;
-import org.apache.camel.impl.engine.SupervisingRouteController;
-import org.apache.camel.impl.engine.SupervisingRouteControllerFilters;
-import org.apache.camel.spi.RouteController;
-import org.apache.camel.spring.boot.SupervisingRouteControllerConfiguration.BackOffConfiguration;
-import org.apache.camel.spring.boot.SupervisingRouteControllerConfiguration.RouteConfiguration;
-import org.apache.camel.util.backoff.BackOff;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Scope;
-
-@Configuration(proxyBeanMethods = false)
-@AutoConfigureBefore(CamelAutoConfiguration.class)
-@ConditionalOnProperty(prefix = "camel.supervising.controller", name = "enabled")
-@EnableConfigurationProperties(SupervisingRouteControllerConfiguration.class)
-public class SupervisingRouteControllerAutoConfiguration {
- @Autowired
- private SupervisingRouteControllerConfiguration configuration;
- @Autowired(required = false)
- private List<SupervisingRouteController.Filter> filters = Collections.emptyList();
-
- @Bean
- @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
- @ConditionalOnMissingBean
- public RouteController routeController() {
- SupervisingRouteController controller = new SupervisingRouteController();
-
- // Initial delay
- Optional.ofNullable(configuration.getInitialDelay()).map(TimePatternConverter::toMilliSeconds).ifPresent(controller::setInitialDelay);
-
- // Filter list
- controller.setFilters(filters);
-
- // Back off
- controller.setDefaultBackOff(configureBackOff(Optional.empty(), configuration.getDefaultBackOff()));
-
- for (Map.Entry<String, RouteConfiguration> entry: configuration.getRoutes().entrySet()) {
- final RouteConfiguration cfg = entry.getValue();
- final Optional<BackOff> defaultBackOff = Optional.ofNullable(controller.getDefaultBackOff());
-
- if (!cfg.isSupervised()) {
- // Mark this route as excluded from supervisor
- controller.addFilter(new SupervisingRouteControllerFilters.BlackList(entry.getKey()));
- } else {
- // configure the route
- controller.setBackOff(entry.getKey(), configureBackOff(defaultBackOff, cfg.getBackOff()));
- }
- }
-
- return controller;
- }
-
- private BackOff configureBackOff(Optional<BackOff> template, BackOffConfiguration conf) {
- final BackOff.Builder builder = template.map(BackOff::builder).orElseGet(BackOff::builder);
-
- Optional.ofNullable(conf.getDelay()).map(TimePatternConverter::toMilliSeconds).ifPresent(builder::delay);
- Optional.ofNullable(conf.getMaxDelay()).map(TimePatternConverter::toMilliSeconds).ifPresent(builder::maxDelay);
- Optional.ofNullable(conf.getMaxElapsedTime()).map(TimePatternConverter::toMilliSeconds).ifPresent(builder::maxElapsedTime);
- Optional.ofNullable(conf.getMaxAttempts()).ifPresent(builder::maxAttempts);
- Optional.ofNullable(conf.getMultiplier()).ifPresent(builder::multiplier);
-
- return builder.build();
- }
-}
diff --git a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SupervisingRouteControllerConfiguration.java b/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SupervisingRouteControllerConfiguration.java
deleted file mode 100644
index 7e27872..0000000
--- a/core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/SupervisingRouteControllerConfiguration.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.spring.boot;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@ConfigurationProperties(prefix = "camel.supervising.controller")
-public class SupervisingRouteControllerConfiguration {
- /**
- * Global option to enable/disable this org.apache.camel.spi.RouteController, default is false.
- */
- private boolean enabled;
-
- /**
- * Set the amount of time the route controller should wait before to start
- * the routes after the camel context is started or after the route is
- * initialized if the route is created after the camel context is started.
- */
- private String initialDelay;
-
- /**
- * The default back-off configuration, back-off configuration for routes inherits from this default.
- */
- private BackOffConfiguration defaultBackOff = new BackOffConfiguration();
-
- /**
- * Routes configuration.
- */
- private Map<String, RouteConfiguration> routes = new HashMap<>();
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- public String getInitialDelay() {
- return initialDelay;
- }
-
- public void setInitialDelay(String initialDelay) {
- this.initialDelay = initialDelay;
- }
-
- public BackOffConfiguration getDefaultBackOff() {
- return defaultBackOff;
- }
-
- public Map<String, RouteConfiguration> getRoutes() {
- return routes;
- }
-
- // *****************************************
- // Configuration Classes
- // *****************************************
-
- public static class RouteConfiguration {
- /**
- * Control if the route should be supervised or not, default is true.
- */
- private boolean supervise = true;
-
- /**
- * The back-off configuration from this route, inherits from default back-off
- */
- private BackOffConfiguration backOff;
-
- public boolean isSupervised() {
- return supervise;
- }
-
- public void setSupervise(boolean supervise) {
- this.supervise = supervise;
- }
-
- public BackOffConfiguration getBackOff() {
- return backOff;
- }
-
- public void setBackOff(BackOffConfiguration backOff) {
- this.backOff = backOff;
- }
- }
-
- public static class BackOffConfiguration {
- /**
- * The delay to wait before retry the operation.
- *
- * You can also specify time values using units, such as 60s (60 seconds),
- * 5m30s (5 minutes and 30 seconds), and 1h (1 hour).
- */
- private String delay;
-
- /**
- * The maximum back-off time.
- *
- * You can also specify time values using units, such as 60s (60 seconds),
- * 5m30s (5 minutes and 30 seconds), and 1h (1 hour).
- */
- private String maxDelay;
-
- /**
- * The maximum elapsed time after which the back-off is exhausted.
- *
- * You can also specify time values using units, such as 60s (60 seconds),
- * 5m30s (5 minutes and 30 seconds), and 1h (1 hour).
- */
- private String maxElapsedTime;
-
- /**
- * The maximum number of attempts after which the back-off is exhausted.
- */
- private Long maxAttempts;
-
- /**
- * The value to multiply the current interval by for each retry attempt.
- */
- private Double multiplier;
-
- public String getDelay() {
- return delay;
- }
-
- public void setDelay(String delay) {
- this.delay = delay;
- }
-
- public String getMaxDelay() {
- return maxDelay;
- }
-
- public void setMaxDelay(String maxDelay) {
- this.maxDelay = maxDelay;
- }
-
- public String getMaxElapsedTime() {
- return maxElapsedTime;
- }
-
- public void setMaxElapsedTime(String maxElapsedTime) {
- this.maxElapsedTime = maxElapsedTime;
- }
-
- public Long getMaxAttempts() {
- return maxAttempts;
- }
-
- public void setMaxAttempts(Long maxAttempts) {
- this.maxAttempts = maxAttempts;
- }
-
- public Double getMultiplier() {
- return multiplier;
- }
-
- public void setMultiplier(Double multiplier) {
- this.multiplier = multiplier;
- }
- }
-}
diff --git a/core/camel-spring-boot/src/main/resources/META-INF/spring.factories b/core/camel-spring-boot/src/main/resources/META-INF/spring.factories
index 246e18f..7b874c7 100644
--- a/core/camel-spring-boot/src/main/resources/META-INF/spring.factories
+++ b/core/camel-spring-boot/src/main/resources/META-INF/spring.factories
@@ -33,7 +33,6 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apache.camel.spring.boot.CamelAutoConfiguration,\
-org.apache.camel.spring.boot.SupervisingRouteControllerAutoConfiguration,\
org.apache.camel.spring.boot.actuate.endpoint.CamelRoutesEndpointAutoConfiguration,\
org.apache.camel.spring.boot.actuate.endpoint.CamelRouteControllerEndpointAutoConfiguration,\
org.apache.camel.spring.boot.actuate.health.CamelHealthAutoConfiguration,\
diff --git a/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerRestartTest.java b/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerRestartTest.java
index d620de9..c0a6399 100644
--- a/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerRestartTest.java
+++ b/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerRestartTest.java
@@ -21,9 +21,8 @@ import java.util.concurrent.TimeUnit;
import org.apache.camel.CamelContext;
import org.apache.camel.ServiceStatus;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.engine.SupervisingRouteController;
+import org.apache.camel.spi.SupervisingRouteController;
import org.apache.camel.spring.boot.dummy.DummyComponent;
-import org.apache.camel.util.backoff.BackOffTimer;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,19 +40,15 @@ import static org.awaitility.Awaitility.await;
@SpringBootTest(
classes = {
CamelAutoConfiguration.class,
- SupervisingRouteControllerAutoConfiguration.class,
SupervisingRouteControllerRestartTest.TestConfiguration.class
},
properties = {
"camel.springboot.xml-routes = false",
"camel.springboot.main-run-controller = true",
- "camel.supervising.controller.enabled = true",
- "camel.supervising.controller.initial-delay = 2s",
- "camel.supervising.controller.default-back-off.delay = 1s",
- "camel.supervising.controller.default-back-off.max-attempts = 10",
- "camel.supervising.controller.routes.bar.back-off.delay = 10s",
- "camel.supervising.controller.routes.bar.back-off.max-attempts = 3",
- "camel.supervising.controller.routes.scheduler-unmanaged.supervise = false"
+ "camel.springboot.routeControllerEnabled = true",
+ "camel.springboot.routeControllerInitialDelay = 500",
+ "camel.springboot.routeControllerBackoffDelay = 1000",
+ "camel.springboot.routeControllerBackoffMaxAttempts = 5",
}
)
public class SupervisingRouteControllerRestartTest {
@@ -70,14 +65,11 @@ public class SupervisingRouteControllerRestartTest {
// Wait for the controller to start the routes
await().atMost(3, TimeUnit.SECONDS).untilAsserted(() -> {
- // now its suspended by the policy
Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("foo"));
Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("bar"));
Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("dummy"));
});
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("scheduler-unmanaged"));
-
// restart the dummy route which should fail on first attempt
controller.stopRoute("dummy");
@@ -89,19 +81,12 @@ public class SupervisingRouteControllerRestartTest {
Assert.assertEquals("Forced error on restart", e.getCause().getMessage());
}
- Assert.assertTrue(controller.getBackOffContext("dummy").isPresent());
- Assert.assertEquals(BackOffTimer.Task.Status.Active, controller.getBackOffContext("dummy").get().getStatus());
- Assert.assertTrue(controller.getBackOffContext("dummy").get().getCurrentAttempts() > 0);
-
// Wait for wile to give time to the controller to start the route
await().atMost(2, TimeUnit.SECONDS).untilAsserted(() -> {
// now its suspended by the policy
Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("dummy"));
Assert.assertNotNull(context.getRoute("dummy").getRouteController());
- Assert.assertFalse(controller.getBackOffContext("dummy").isPresent());
});
-
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("scheduler-unmanaged"));
}
// *************************************
@@ -126,14 +111,6 @@ public class SupervisingRouteControllerRestartTest {
.id("bar")
.startupOrder(1)
.to("mock:bar");
- from("scheduler:unmanaged?initialDelay=5000")
- .id("scheduler-unmanaged")
- .to("mock:scheduler-unmanaged");
- from("timer:no-autostartup?period=5000")
- .id("timer-no-autostartup")
- .autoStartup(false)
- .to("mock:timer-no-autostartup");
-
from("dummy:foo?failOnRestart=true")
.id("dummy")
.to("mock:dummy");
diff --git a/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerTest.java b/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerTest.java
index 8c8dc37..b48c18a 100644
--- a/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerTest.java
+++ b/core/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/SupervisingRouteControllerTest.java
@@ -21,9 +21,8 @@ import java.util.concurrent.TimeUnit;
import org.apache.camel.CamelContext;
import org.apache.camel.ServiceStatus;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.engine.SupervisingRouteController;
+import org.apache.camel.spi.SupervisingRouteController;
import org.apache.camel.test.AvailablePortFinder;
-import org.apache.camel.util.backoff.BackOff;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,20 +40,16 @@ import static org.awaitility.Awaitility.await;
@SpringBootTest(
classes = {
CamelAutoConfiguration.class,
- SupervisingRouteControllerAutoConfiguration.class,
SupervisingRouteControllerTest.TestConfiguration.class
},
properties = {
"camel.springboot.xml-routes = false",
"camel.springboot.xml-rests = false",
"camel.springboot.main-run-controller = true",
- "camel.supervising.controller.enabled = true",
- "camel.supervising.controller.initial-delay = 2s",
- "camel.supervising.controller.default-back-off.delay = 1s",
- "camel.supervising.controller.default-back-off.max-attempts = 10",
- "camel.supervising.controller.routes.bar.back-off.delay = 10s",
- "camel.supervising.controller.routes.bar.back-off.max-attempts = 3",
- "camel.supervising.controller.routes.scheduler-unmanaged.supervise = false"
+ "camel.springboot.routeControllerEnabled = true",
+ "camel.springboot.routeControllerInitialDelay = 500",
+ "camel.springboot.routeControllerBackoffDelay = 1000",
+ "camel.springboot.routeControllerBackoffMaxAttempts = 5",
}
)
public class SupervisingRouteControllerTest {
@@ -69,36 +64,14 @@ public class SupervisingRouteControllerTest {
SupervisingRouteController controller = context.getRouteController().unwrap(SupervisingRouteController.class);
// Wait for the controller to start the routes
- await().atMost(3, TimeUnit.SECONDS).untilAsserted(() -> {
+ await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
Assert.assertEquals(3, controller.getControlledRoutes().size());
- Assert.assertEquals(2, controller.getInitialDelay().getSeconds());
- });
-
- // Route foo
- BackOff foo = controller.getBackOff("foo");
- Assert.assertEquals(1, foo.getDelay().getSeconds());
- Assert.assertEquals(Long.MAX_VALUE, foo.getMaxDelay().toMillis());
- Assert.assertEquals(10L, foo.getMaxAttempts().longValue());
-
- // Route bar
- BackOff bar = controller.getBackOff("bar");
- Assert.assertEquals(10, bar.getDelay().getSeconds());
- Assert.assertEquals(Long.MAX_VALUE, bar.getMaxDelay().toMillis());
- Assert.assertEquals(3L, bar.getMaxAttempts().longValue());
-
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("foo"));
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("bar"));
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("timer-no-autostartup"));
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("jetty"));
+ Assert.assertEquals(500, controller.getInitialDelay());
- // Wait for the controller to start the routes
- await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
+ Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("foo"));
+ Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("bar"));
Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("jetty"));
});
- Assert.assertEquals(ServiceStatus.Started, context.getRouteController().getRouteStatus("jetty"));
-
- // this one is never started as it was not managed (then its not started)
- Assert.assertEquals(ServiceStatus.Stopped, context.getRouteController().getRouteStatus("scheduler-unmanaged"));
}
// *************************************
@@ -122,14 +95,6 @@ public class SupervisingRouteControllerTest {
.id("bar")
.startupOrder(1)
.to("mock:bar");
- from("scheduler:unmanaged?initialDelay=5000")
- .id("scheduler-unmanaged")
- .to("mock:scheduler-unmanaged");
- from("timer:no-autostartup?period=5000")
- .id("timer-no-autostartup")
- .autoStartup(false)
- .to("mock:timer-no-autostartup");
-
fromF("jetty:http://localhost:%d", PORT)
.id("jetty")
.to("mock:jetty");
diff --git a/examples/camel-example-spring-boot-supervising-route-controller/src/main/java/sample/camel/ApplicationRoutes.java b/examples/camel-example-spring-boot-supervising-route-controller/src/main/java/sample/camel/ApplicationRoutes.java
index 169b8a6..ce7e7ce 100644
--- a/examples/camel-example-spring-boot-supervising-route-controller/src/main/java/sample/camel/ApplicationRoutes.java
+++ b/examples/camel-example-spring-boot-supervising-route-controller/src/main/java/sample/camel/ApplicationRoutes.java
@@ -19,9 +19,6 @@ package sample.camel;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
-/**
- *
- */
@Component
public class ApplicationRoutes extends RouteBuilder {
@Override
diff --git a/examples/camel-example-spring-boot-supervising-route-controller/src/main/resources/application.properties b/examples/camel-example-spring-boot-supervising-route-controller/src/main/resources/application.properties
index d8ac2c6..0c1c000 100644
--- a/examples/camel-example-spring-boot-supervising-route-controller/src/main/resources/application.properties
+++ b/examples/camel-example-spring-boot-supervising-route-controller/src/main/resources/application.properties
@@ -20,7 +20,7 @@ debug = false
logging.level.org.springframework = INFO
logging.level.org.apache.camel.spring.boot = INFO
logging.level.org.apache.camel.impl = INFO
-logging.level.org.apache.camel.impl.SupervisingRouteController = DEBUG
+logging.level.org.apache.camel.impl.engine.DefaultSupervisingRouteController = DEBUG
logging.level.org.apache.camel.util.backoff = DEBUG
logging.level.sample.camel = DEBUG
@@ -37,9 +37,7 @@ management.endpoint.camelroutes.read-only = false
camel.springboot.name = SampleSupervisingRouteController
-camel.supervising.controller.enabled = true
-camel.supervising.controller.initial-delay = 5000
-camel.supervising.controller.default-back-off.delay = 5000
-camel.supervising.controller.default-back-off.max-attempts = 10
-camel.supervising.controller.routes.undertow.back-off.delay = 10000
-camel.supervising.controller.routes.undertow.back-off.max-attempts = 3
+camel.springboot.routeControllerEnabled = true
+camel.springboot.routeControllerInitialDelay = 5000
+camel.springboot.routeControllerBackoffDelay = 5000
+camel.springboot.routeControllerBackoffMaxAttempts = 10