Browse Source

new example: spring boot packaging

master
Nicolas Massé 8 years ago
parent
commit
294e991902
  1. 100
      spring-boot-packaging/README.md
  2. 103
      spring-boot-packaging/pom.xml
  3. 16
      spring-boot-packaging/src/main/java/fr/itix/camel/spring_boot_packaging/MySpringBootApplication.java
  4. 21
      spring-boot-packaging/src/main/resources/application.properties
  5. 6
      spring-boot-packaging/src/main/resources/camel/hello-world.xml

100
spring-boot-packaging/README.md

@ -0,0 +1,100 @@
# Spring Boot packaging for Camel
## Goals
Spring Boot enables you to package your Camel routes along with any required
dependency. A "fat jar" is produced and can be run with just a `java -jar /path/to/app.jar`.
In this example, we will package the Camel routes as a Spring Boot application.
## How this project has been created
Generate a new Maven project using the `camel-archetype-spring-boot` archetype:
```
mvn archetype:generate -DarchetypeGroupId=org.apache.camel.archetypes -DarchetypeArtifactId=camel-archetype-spring-boot -DarchetypeVersion=2.21.1 -DinteractiveMode=false -DgroupId=fr.itix.camel-examples -DartifactId=spring-boot-packaging -Dversion=1.0-SNAPSHOT -Dpackage=fr.itix.camel.spring_boot_packaging
```
By default, the `camel-archetype-spring-boot` archetype creates a sample route
using the Java DSL. In this example, we will use the Spring DSL, so you can remove
the two following classes:
```
rm src/main/java/fr/itix/camel/spring_boot_packaging/MySpringBean.java
rm src/main/java/fr/itix/camel/spring_boot_packaging/MySpringBootRouter.java
```
Create a `camel` directory in `src/main/resources`:
```
mkdir src/main/resources/camel/
```
Create an `hello-world.xml` file in the newly created `camel` directory with
this content:
```
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="hello-world">
<from uri="timer:hello?period=1000"/>
<log message="Hello, world !" />
</route>
</routes>
```
## Try it !
Each time you changed something in your `camel-context.xml`, you will have
to re-run Camel with:
```
mvn package spring-boot:run
```
If you followed the instructions, you should have something like this:
```
[INFO] --- spring-boot-maven-plugin:1.5.12.RELEASE:run (default-cli) @ spring-boot-packaging ---
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.12.RELEASE)
2018-06-05 12:40:51.475 INFO 24580 --- [ main] f.i.c.s.MySpringBootApplication : Starting MySpringBootApplication on nmasse-OSX.local with PID 24580 (/Users/nmasse/git/perso/Camel-Examples/spring-boot-packaging/target/classes started by nmasse in /Users/nmasse/git/perso/Camel-Examples/spring-boot-packaging)
2018-06-05 12:40:51.477 INFO 24580 --- [ main] f.i.c.s.MySpringBootApplication : No active profile set, falling back to default profiles: default
[...]
2018-06-05 12:40:54.527 INFO 24580 --- [ main] o.a.camel.spring.boot.RoutesCollector : Loading additional Camel XML routes from: classpath:camel/*.xml
2018-06-05 12:40:55.006 INFO 24580 --- [ main] o.a.camel.spring.boot.RoutesCollector : Loading additional Camel XML rests from: classpath:camel-rest/*.xml
2018-06-05 12:40:55.020 INFO 24580 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.21.1 (CamelContext: MyCamel) is starting
2018-06-05 12:40:55.021 INFO 24580 --- [ main] o.a.c.m.ManagedManagementStrategy : JMX is enabled
2018-06-05 12:40:55.190 INFO 24580 --- [ main] o.a.camel.spring.SpringCamelContext : StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2018-06-05 12:40:55.205 INFO 24580 --- [ main] o.a.camel.spring.SpringCamelContext : Route: hello-world started and consuming from: timer://hello?period=1000
2018-06-05 12:40:55.207 INFO 24580 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started
2018-06-05 12:40:55.207 INFO 24580 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.21.1 (CamelContext: MyCamel) started in 0.187 seconds
2018-06-05 12:40:55.263 INFO 24580 --- [ main] b.c.e.u.UndertowEmbeddedServletContainer : Undertow started on port(s) 8080 (http)
2018-06-05 12:40:55.271 INFO 24580 --- [ main] f.i.c.s.MySpringBootApplication : Started MySpringBootApplication in 4.173 seconds (JVM running for 7.038)
2018-06-05 12:40:56.222 INFO 24580 --- [- timer://hello] hello-world : Hello, world !
2018-06-05 12:40:57.216 INFO 24580 --- [- timer://hello] hello-world : Hello, world !
2018-06-05 12:40:58.216 INFO 24580 --- [- timer://hello] hello-world : Hello, world !
2018-06-05 12:40:59.217 INFO 24580 --- [- timer://hello] hello-world : Hello, world !
```
Note: you will have to press Ctrl-C to exit this Hello World example!
## Packaging
As you might have noticed, by default this archetype generates a fat jar:
```
$ ls -lh target/*.jar
-rw-r--r-- 1 nmasse staff 21M Jun 5 12:40 target/spring-boot-packaging-1.0-SNAPSHOT.jar
```
When ready, you can copy the fat jar on another server and run it:
```
java -jar target/spring-boot-packaging-1.0-SNAPSHOT.jar
```
## References
- [Camel Archetypes](http://camel.apache.org/camel-maven-archetypes.html)
- [Spring Boot support for Camel](http://camel.apache.org/spring-boot.html)

103
spring-boot-packaging/pom.xml

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.itix.camel-examples</groupId>
<artifactId>spring-boot-packaging</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>A Camel Spring Boot Route</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring.boot-version>1.5.12.RELEASE</spring.boot-version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot BOM -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Camel BOM -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-dependencies</artifactId>
<version>2.21.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Camel -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-stream-starter</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-spring</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot-version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

16
spring-boot-packaging/src/main/java/fr/itix/camel/spring_boot_packaging/MySpringBootApplication.java

@ -0,0 +1,16 @@
package fr.itix.camel.spring_boot_packaging;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
/**
* A main method to start this application.
*/
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}

21
spring-boot-packaging/src/main/resources/application.properties

@ -0,0 +1,21 @@
# to automatic shutdown the JVM after a period of time
#camel.springboot.duration-max-seconds=60
#camel.springboot.duration-max-messages=100
# add for example: &repeatCount=5 to the timer endpoint to make Camel idle
#camel.springboot.duration-max-idle-seconds=15
# all access to actuator endpoints without security
management.security.enabled = false
# turn on actuator health check
endpoints.health.enabled = true
# allow to obtain basic information about camel routes (read only mode)
endpoints.camelroutes.enabled = true
endpoints.camelroutes.read-only = true
# to configure logging levels
#logging.level.org.springframework = INFO
#logging.level.org.apache.camel.spring.boot = INFO
#logging.level.org.apache.camel.impl = DEBUG
#logging.level.sample.camel = DEBUG

6
spring-boot-packaging/src/main/resources/camel/hello-world.xml

@ -0,0 +1,6 @@
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="hello-world">
<from uri="timer:hello?period=1000"/>
<log message="Hello, world !" />
</route>
</routes>
Loading…
Cancel
Save