Spring Java Configuration

Since Camel 2.0

Spring started life using XML Config to wire beans together. However some folks don’t like using XML and would rather use Java code with the Spring JavaConfig project.

You can use either the XML or Java config approaches with Camel; its your choice really on which you prefer.

Using Spring Java Config

To use Spring Java Config in your Camel project the easiest thing to do is add the following to your pom.xml

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-spring-javaconfig</artifactId>
  <version>${camel-version}</version>
</dependency>

This will then add the dependencies on the Spring JavaConfig library along with some helper classes for configuring Camel inside Spring.

Note that this library is totally optional; you could just wire Camel together yourself with Java Config.

Configuration

The most common case of using JavaConfig with Camel would be to create configuration with defined list of routes to be used by router.

@Configuration
public class MyRouteConfiguration extends CamelConfiguration {

    @Autowire
    private MyRouteBuilder myRouteBuilder;

    @Autowire
    private MyAnotherRouteBuilder myAnotherRouteBuilder;

    @Override
    public List<RouteBuilder> routes() {
        return Arrays.asList(myRouteBuilder, myAnotherRouteBuilder);
    }

}

You can skip the routes() definition, and fall back to the RouteBuilder instances located in the Spring context.

@Configuration
@ComponentScan("com.example.routes")
public class MyRouteConfiguration extends CamelConfiguration {
}

Testing

You can use the CamelSpringJUnit4ClassRunner with CamelSpringDelegatingTestContextLoader. This is the recommended way to test Java Config and Camel integration.

If you wish to create a collection of RouteBuilder instances then derive from the CamelConfiguration helper class and implement the routes() method. Keep in mind that if you don’t override routes() method, then CamelConfiguration will use all RouteBuilder instances available in the Spring context.

The @ContextConfiguration annotation tells the Spring Testing framework to load the ContextConfig class as the configuration to use. This class derives from SingleRouteCamelConfiguration which is a helper Spring Java Config class which will configure the CamelContext for us and then register the RouteBuilder we create.

Spring Boot Auto-Configuration

When using spring-javaconfig with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-spring-javaconfig-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

The component has no Spring Boot auto configuration options.