Spring Boot中使用自定义Kamelet启动报错:无法找到对应端点
问题描述
尝试在Camel Spring Boot路由中定义并运行一个简单的Kamelet,启动时出现端点找不到的错误。
相关代码与配置
自定义Kamelet文件 (src/main/resources/kamelets/my-kamelet.kamelet.yaml)
apiVersion: camel.apache.org/v1alpha1 kind: Kamelet metadata: name: my-kamelet spec: template: from: uri: timer:mykamelet?period=1000 steps: - log: "Executing Kamelet scheduled job"
RouteBuilder实现代码
@Component public class KameletRoute extends RouteBuilder { @Override public void configure() throws Exception { from("kamelet:my-kamelet") .log("Executing main route"); } }
pom.xml相关依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-spring-boot-starter</artifactId> <version>${camel.version}</version> </dependency> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-kamelet-starter</artifactId> <version>${camel.version}</version> </dependency>
启动报错信息
ERROR 20372 --- [kamelet-poc] [ restartedMain] o.s.boot.SpringApplication : Application run failed org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[From[kamelet:my-kamelet] -> [Log[Executing mai... because of No endpoint could be found for: kamelet://my-kamelet, please check your classpath contains the needed Camel component jar.
排查与解决方案
以下是关键的修复步骤:
- 确认Camel版本兼容性:使用支持Kamelet的稳定版本(建议3.14.x及以上或4.x系列),过低版本可能不支持Kamelet组件。
- 补充核心依赖:在pom.xml中添加
camel-kamelet核心依赖,starter可能未包含全部必要类:<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-kamelet</artifactId> <version>${camel.version}</version> </dependency> - 校验文件路径:确保自定义Kamelet放在
src/main/resources/kamelets(复数形式)目录下,Spring Boot才能扫描到。 - 添加扫描配置:在
application.properties中配置Kamelet扫描路径,强制Camel加载自定义Kamelet:camel.kamelet.location=classpath:kamelets/*.kamelet.yaml - 检查命名一致性:确保路由中引用的
kamelet:my-kamelet与Kamelet元数据的name: my-kamelet完全一致,大小写敏感。 - 手动注册组件(可选):如果自动配置未加载Kamelet组件,手动注册Bean:
@Bean public KameletComponent kameletComponent(CamelContext context) { return new KameletComponent(context); }
内容的提问来源于stack exchange,提问作者Jirmed
相关产品推荐
相关产品推荐

