318.3. 如何从其他 XML 文件导入路由


从 Camel 2.3 开始提供

当使用 Xml 配置 在 Camel 中定义路由时,您可能想要在其他 XML 文件中定义一些路由。例如,如果某些路由位于单独的 XML 文件中,则可能有助于维护应用程序。您可能还想将通用和可重复使用的路由存储在其他 XML 文件中,在需要时只需导入即可。

Camel 2.3 中,现在可以定义您在新的 &lt ; routeContext/> 标签中 <camel Context/> 以外的路由。

注: 当使用 <routeContext> 时,它们会被分隔,且无法重复使用现有的 <onException>、<intercept>、<dataFormats> 和类似跨线 <camelContext> 中定义的功能。换句话说,<routeContext> 当前被隔离。在 Camel 3.x 中可能会改变。

例如,我们可能有一个名为 myCoolRoutes.xml 的文件,其中包含几个路由,如下所示:

myCoolRoutes.xml

然后,在包含 CamelContext 的 XML 文件中,您可以使用 Spring 导入 myCoolRoute.xml 文件。
然后,在 <camelContext/& gt; 内,您可以通过其 id 引用 & lt;routeContext />,如下所示:

另请注意,您可以混合和匹配,在 CamelContext 内具有路由,并在 RouteContext 中外部化。

尽可能多的 &lt ;routeContextRef/& gt;。

可重复使用的路由

< routeContext/& gt; 中定义的路由可以被多个 < camelContext/> 重复使用。但是,它只会重复使用的定义。在运行时,每个 CamelContext 将根据定义创建自己的路由实例。

318.3.1. 测试时间排除。

在测试时,通常最好有选择地将匹配路由排除在 initalized 中,这些路由不适用于测试场景。例如,您可能在 'org.example.routes' 软件包中有一个 spring 上下文文件 routes-context.xml 和三个 Route builders RouteA、RouteB 和 RouteC。packageScan 定义将发现所有三个路由并初始化它们。

指出 RouteC 不适用于我们的测试场景,并在测试过程中生成很多 noise。最好从此特定测试中排除此路由。SpringTestSupport 类已被修改,以允许这样做。它提供两种方法(excludedRoute 和 excludeRoutes),它们可能会被覆盖来排除单个类或类数组。

public class RouteAandRouteBOnlyTest extends SpringTestSupport {
    @Override
    protected Class excludeRoute() {
        return RouteC.class;
    }
}

为了通过 spring 到 camelContext 初始化中的 hook 来排除 MyExcludedRouteBuilder.class,我们需要截获 spring 上下文创建。当覆盖 createApplicationContext 来创建 spring 上下文时,我们调用 getRouteExcludingApplicationContext ()方法,以提供处理排除的特殊父 spring 上下文。

@Override
protected AbstractXmlApplicationContext createApplicationContext() {
    return new ClassPathXmlApplicationContext(new String[] {"routes-context.xml"}, getRouteExcludingApplicationContext());
}

RouteC 现在将不包括在初始化中。同样,在只测试 RouteC 的另一个测试中,我们可以通过覆盖排除 RouteB 和 RouteA

@Override
protected Class[] excludeRoutes() {
    return new Class[]{RouteA.class, RouteB.class};
}
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部