...
Code Block | ||||
---|---|---|---|---|
| ||||
install file:///home/user/.m2/repository/com/example/myrouter/1.0/myrouter-1.0.jar start <your-bundle-id> |
Auto-configured consumer and producer templates
...
KuraRouter utilities
Kura router base class provides many useful utilities. This section explores each of those.
SLF4J logger
Code Block | ||
---|---|---|
| ||
@Component public class InvoiceProcessorMyKuraRouter extends KuraRouter { @Autowired private ProducerTemplate producerTemplate; @Override @Autowired private ConsumerTemplate consumerTemplate; public void processNextInvoiceconfigure() { throws Invoice invoice = consumerTemplate.receiveBody("jms:invoices", Invoice.class); ... producerTemplate.sendBody("netty-http:http://invoicing.com/received/" + invoice.id()); } } |
By default consumer and producer templates comes with the endpoint cache sizes equal to 1000. You can change that values via the following Spring properties:
...
camel.springboot.consumerTemplateCacheSize = 100
camel.springboot.producerTemplateCacheSize = 200
Auto-configured TypeConverter
Camel auto-configuration registers TypeConverter
instance named typeConverter
in the Spring context.
Code Block | ||
---|---|---|
| ||
@Component public class InvoiceProcessor { @Autowired private TypeConverter typeConverter; public long parseInvoiceValue(Invoice invoice) { String invoiceValue = invoice.grossValue(Exception { log.info("Configuring Camel routes!"); return typeConverter.convertTo(Long.class, invoiceValue); } } |
Spring type conversion API bridge
...
. |
...
. |
...
. |
...
Code Block | ||
---|---|---|
| ||
@Component public class InvoiceProcessor { @Autowired private TypeConverter typeConverter; public UUID parseInvoiceId(Invoice invoice) { // Using Spring's StringToUUIDConverter UUID id = invoice.typeConverter.convertTo(UUID.class, invoice.getId()); } } |
Under the hood Camel Spring Boot delegates conversion to the Spring's ConversionService
instances available in the application context. If no ConversionService
instance is available, Camel Spring Boot auto-configuration will create one for you.
Disabling type conversions features
If you don't want Camel Spring Boot to register type-conversions related features (like TypeConverter
instance or Spring bridge) set the camel.springboot.typeConversion
property to false
.
...
camel.springboot.typeConversion = false
BundleContext
Code Block | ||
---|---|---|
| ||
public class MyKuraRouter extends KuraRouter |
Fat jars and fat wars
The easiest way to create Camel-aware Spring Boot fat jar/war is to extend the org.apache.camel.spring.boot.F
class...atJarRouter
Code Block | ||
---|---|---|
| ||
package com.example; ... // imports @SpringBootApplication public class MyFatJarRouter extends FatJarRouter { @Override public void configure() throws Exception { ServiceReference<MyService> serviceRef from("netty-http:http://0.0.0.0:18080"). setBody().simple("ref:helloWorld"); } @Bean String helloWorld() { return "helloWorld"; } } |
...and add the following property to your application.properties
file:
...
spring.main.sources = com.example.MyFatJarRouter
It is also recommended to define your main class explicitly in the Spring Boot Maven plugin configuration:
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.MyFatJarRouter</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
In order to turn your fat jar into fat war, add the following class extending org.apache.camel.spring.boot.F
to your project:atWarInitializer
...
language | java |
---|
...
= bundleContext.getServiceReference(LogService.class.getName());
MyService myService = content.getService(serviceRef);
...
}
} |
...
Include Page | ||||
---|---|---|---|---|
|