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