You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Camel 3.17+ camel-main能否直接加载经典XML配置独立运行

Apache Camel 3.17+ 独立运行加载XML DSL 说明

Apache Camel 3.17及以上版本完全支持在camel-main独立运行模式下直接加载XML DSL路由,不需要依赖Spring、CDI等外部容器,但你提供的XML示例是Spring集成场景下的专用写法,需要做小幅调整才能被camel-main原生加载。


前置依赖准备

首先需要引入核心依赖,以Maven为例:

<!-- camel-main 核心依赖 -->
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-main</artifactId>
    <version>3.17.0</version> <!-- 替换为你实际使用的3.17+版本号 -->
</dependency>
<!-- 原生XML DSL解析依赖,无额外Spring传递依赖 -->
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-xml-jaxb</artifactId>
    <version>3.17.0</version>
</dependency>

如果一定要加载外层包裹Spring <beans> 标签、包含Spring Bean定义的旧格式XML,需要额外引入camel-spring依赖,但这种方式本质是走Spring上下文加载逻辑,不属于camel-main原生支持范畴,更推荐使用无Spring依赖的原生XML写法。


XML路由文件格式调整

camel-main原生加载的XML DSL不需要外层嵌套Spring的<beans>节点,支持两种根节点写法:

  • 仅定义路由时直接用<routes>作为根节点
  • 需要定义全局组件、异常策略、数据格式等Camel上下文级配置时,用<camelContext>作为根节点

修正后的XML示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 根节点直接用camelContext即可,不需要套beans标签 -->
<camelContext xmlns="http://camel.apache.org/schema/spring">
    <!-- 全局配置、组件注册、异常处理等内容可以写在这里 -->
    <route id="demoRoute">
        <from uri="direct:input"/>
        <log message="log message for demo"/>
        <to uri="file:src/main/resources/data/"/>
    </route>
</camelContext>

加载XML路由的两种方式

方式1:自动扫描加载(推荐)

camel-main默认会自动扫描classpath下classpath:camel/*.xml、classpath:routes/**/*.xml路径下的所有XML路由文件,不需要手动写加载逻辑,启动类可以简化为:

public class MainApp {
    public static void main(String... args) throws Exception {
        Main main = new Main();
        main.run(args);
    }
}

如果你的XML文件存放在自定义路径,可以在application.properties中配置扫描规则:

# 配置自定义XML路由扫描路径
camel.main.routes-include-pattern = classpath:my-custom-routes/**/*.xml

方式2:代码手动指定加载路径

如果需要在代码中灵活控制要加载的XML文件,可以手动指定加载路径:

public class MainApp {
    public static void main(String... args) throws Exception {
        Main main = new Main();
        // 手动指定要加载的XML文件,支持多个路径用逗号分隔
        main.configure().withRoutesIncludePattern("classpath:demo-route.xml,classpath:other-routes/*.xml");
        main.run(args);
    }
}

注意事项

  • 不要直接加载外层包裹Spring <beans> 标签、依赖Spring Bean定义的XML配置,这类配置属于camel-spring模块专属格式,camel-main原生解析器无法识别,会抛出解析异常。
  • 如果你的路由逻辑需要依赖Spring容器管理的Bean,建议直接使用camel-spring或camel-spring-boot模块启动,不要使用camel-main原生XML加载方案。
  • Camel 3.17+版本支持多DSL混合加载,Java DSL、XML DSL、YAML DSL编写的路由可以同时存在,camel-main启动时会自动识别并加载所有符合规则的路由定义。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:39:19