# Camel Supervising Route Controller Example Spring Boot

This example shows how to work with a simple Apache Camel application using Spring Boot and a Supervising Route Controller.

## How to run

You can run this example using

    mvn spring-boot:run

Beside JMX you can use Spring Boot Endpoints to interact with the routes:

* To get info about the routes
+
[source]
----
curl -XGET -s http://localhost:8080/actuator/camelroutes
----

* To get details about a route
+
[source]
----
curl -XGET -s http://localhost:8080/actuator/camelroutes/{id}/detail
----

* To get info about a route
+
[source]
----
curl -XGET -s http://localhost:8080/actuator/camelroutes/{id}/info
----

* To stop a route
+
[source]
----
curl -XPOST -H "Content-Type: application/json" -s http://localhost:8080/actuator/camelroutes/{id}/stop
----

* To start a route
+
[source]
----
curl -XPOST -H "Content-Type: application/json" -s http://localhost:8080/actuator/camelroutes/{id}/start
----


## More information

You can find more information about Apache Camel at the website: http://camel.apache.org/
