= Apache Camel Spring Boot starters

Camel support for Spring Boot provides auto-configuration of the Camel and starters for many Camel xref:components::index.adoc[components]. Our opinionated auto-configuration of the Camel context auto-detects Camel routes available in the Spring context and registers the key Camel utilities (like producer template, consumer template and the type converter) as beans.

Get started by adding the Camel Spring Boot BOM to your Maven `pom.xml` file.

[source,xml]
----
<dependencyManagement>

    <dependencies>
        <!-- Camel BOM -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-bom</artifactId>
            <version>${project.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- ... other BOMs or dependencies ... -->
    </dependencies>

</dependencyManagement>
----

The `camel-spring-boot-bom` is a basic BOM that only holds the list of Camel Spring Boot starter JARs.

Next, add the xref:spring-boot.adoc[Camel Spring Boot starter] to startup the xref:manual::camelcontext.adoc[Camel Context].

[source,xml]
----
    <dependencies>
        <!-- Camel Starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
        </dependency>
        <!-- ... other dependencies ... -->
    </dependencies>
----

Also add any xref:list.adoc[component starters] your Spring Boot application requires. For example this adds the xref:components::activemq-component.adoc#_spring_boot_auto_configuration[auto-configuration starter] for the xref:components::activemq-component.adoc[ActiveMQ component].

[source,xml]
----
    <dependencies>
        <!-- ... other dependencies ... -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-activemq-starter</artifactId>
        </dependency>
    </dependencies>
----

== Camel Spring Boot BOM vs Camel Spring Boot Dependencies BOM

There is a curated `camel-spring-boot-dependencies` which is a generated BOM that has adjusted the JARs that both Spring Boot
and Apache Camel may use to use single shared version that will not conflict. This BOM is what is used to test camel-spring-boot itself.
However Spring Boot users may want to use _pure_ Camel dependencies and hence why you can use `camel-spring-boot-bom` that only has the
Camel starter JARs as managed dependencies. This may lead to a classpath conflict if a 3rd party JAR from Spring Boot is not compatible
with a Camel component.

== Making sure Camel context is running in standalone Spring Boot

To ensure the Spring Boot application keeps running until being stopped or the JVM terminated, typically only need when running Spring Boot standalone, i.e. not with `spring-boot-starter-web` when the web container keeps the JVM running, set the `camel.springboot.main-run-controller=true` property in your configuration. For example in `application.properties`.

[source]
----
# to keep the JVM running
camel.springboot.main-run-controller = true
----

== Spring Boot configuration support

Each xref:list.adoc[starter] lists configuration parameters you can configure in the standard `application.properties` or `application.yml` files. These parameters have the form of `camel.component.[component-name].[parameter]`. For example to configure the URL of the ActiveMQ broker you can set:

[source]
----
camel.component.activemq.broker-url=tcp://localhost:61616
----

== Adding Camel routes

Camel xref:manual::routes.adoc[routes] are detected in the Spring application context, for example a route annotated with `org.springframework.stereotype.Component` will be loaded, added to the Camel context and run.

[source,java]
----
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class MyRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("...")
            .to("...");
    }

}
----
