一、版本兼容说明
接入前需注意版本对应关系,避免启动异常:
Apache Camel 4.x → Spring Boot 3.x(要求 Java 17+)
Apache Camel 3.x → Spring Boot 2.x(支持 Java 8+)
下文以 Spring Boot 3.2.x + Apache Camel 4.4.0 为例,覆盖核心接入流程与常用场景示例。

二、核心接入步骤
步骤 1:引入 Maven 依赖
在 pom.xml 中引入 Camel 核心启动器与业务所需组件的启动器,Camel 提供 300 + 组件,按需引入即可:
<dependencies>
<!-- Spring Boot Web 基础(若无需HTTP接口可换成spring-boot-starter) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Apache Camel Spring Boot 核心启动器 -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<!-- 组件:定时器 -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-timer-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<!-- 组件:REST接口 -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-rest-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<!-- 组件:Servlet(承载REST HTTP服务,复用Spring Boot容器) -->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-servlet-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
</dependencies>
步骤 2:基础配置(application.yml)
配置 Camel 上下文、Servlet 映射等基础参数:
server:
port: 8080
camel:
springboot:
name: CustomCamelContext # Camel上下文名称
main-run-controller: true # 非Web项目必须开启,保持进程不退出
servlet:
mapping:
context-path: /camel/* # Camel HTTP接口的访问前缀
步骤 3:自定义路由(核心)
Camel 的核心是路由(Route),通过继承 RouteBuilder 并重写 configure 方法定义流转规则;类上加 @Component 注解后,Spring 会自动扫描并注册到 Camel 上下文中。
示例 1:定时日志路由
每 5 秒触发一次,输出带时间戳的日志:
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class TimerLogRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// from: 路由起点(定时器端点)
from("timer:helloTimer?period=5000")
.setBody().constant("Hello Camel + Spring Boot")
.setHeader("timestamp", simple("${date:now:yyyy-MM-dd HH:mm:ss}"))
// to: 路由终点(日志端点)
.to("log:timerLogger?level=INFO&showHeaders=true");
}
}
示例 2:REST 接口路由
提供 HTTP GET 接口,自动返回 JSON 格式数据:
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.rest.RestBindingMode;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class RestApiRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// REST全局配置:Servlet承载、自动JSON绑定
restConfiguration()
.component("servlet")
.contextPath("/camel")
.port(8080)
.bindingMode(RestBindingMode.json);
// 定义REST接口:GET /camel/api/hello
rest("/api")
.get("/hello")
.to("direct:helloHandler");
// 接口业务逻辑
from("direct:helloHandler")
.setBody().constant(Map.of(
"code", 200,
"msg", "success",
"data", "Hello from Camel REST API"
));
}
}
示例 3:文件搬运路由
监听指定目录,自动将文件从源目录移动到目标目录:
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class FileTransferRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// 监听 ./data/input 目录,文件移动到 ./data/output
from("file:./data/input?noop=false")
.log("接收到文件: ${header.CamelFileName}")
.to("file:./data/output");
}
}
步骤 4:Spring Boot 启动类
无需额外配置,标准 Spring Boot 启动类即可,Camel 会自动装配上下文与路由:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CamelDemoApplication {
public static void main(String[] args) {
SpringApplication.run(CamelDemoApplication.class, args);
}
}
步骤 5:效果验证
启动应用,控制台每 5 秒会输出定时日志;
访问
http://localhost:8080/camel/api/hello,可接收到 JSON 响应;在项目根目录创建
data/input文件夹并放入文件,文件会自动移动到data/output目录。
三、进阶常用场景
1. 调用 Spring 业务 Bean
在路由中直接调用 Spring 管理的 Service:
// 业务Bean
@Service("userService")
public class UserService {
public Map<String, Object> getUserById(Integer id) {
return Map.of("id", id, "name", "张三", "age", 25);
}
}
// 路由中调用
rest("/api/user")
.get("/{id}")
.to("direct:getUser");
from("direct:getUser")
.bean("userService", "getUserById(${header.id})")
.log("查询结果: ${body}");
2. 全局异常处理
通过 onException 统一处理路由异常:
@Override
public void configure() throws Exception {
// 全局异常捕获
onException(Exception.class)
.handled(true) // 标记异常已处理,不再向上抛出
.log("路由异常: ${exception.message}")
.setBody().constant(Map.of("code", 500, "msg", "系统内部异常"));
// 测试接口
rest("/api/error")
.get("/test")
.to("direct:errorTest");
from("direct:errorTest")
.throwException(new RuntimeException("模拟业务异常"));
}
3. 配置化参数注入
通过 @Value 将配置文件参数注入路由:
@Component
public class ConfigRoute extends RouteBuilder {
@Value("${camel.timer.period:3000}")
private long timerPeriod;
@Override
public void configure() throws Exception {
from("timer:configTimer?period=" + timerPeriod)
.setBody().constant("配置化定时任务")
.to("log:configLogger");
}
}

四、关键说明
自动装配:
camel-spring-boot-starter会自动创建CamelContext,并扫描所有RouteBuilder类型的 Spring Bean 完成路由注册;组件扩展:所有 Camel 组件均有对应的 Spring Boot Starter,命名格式为
camel-xxx-spring-boot-starter;生命周期:Camel 上下文与 Spring 应用上下文同步启停,无需手动管理。
原文链接
欢迎访问 小易撩挨踢