318.2. 添加 Camel 架构
对于 Camel 1.x,您需要使用以下命名空间:
http://activemq.apache.org/camel/schema/spring
使用以下模式位置:
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
您需要将 Camel 添加到 schemaLocation
声明
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
XML 文件类似如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
318.2.1. 使用 camel: namespace
或者您可以在 XML 声明中引用 camel XSD:
xmlns:camel="http://camel.apache.org/schema/spring"
- 因此声明是:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
- 然后,使用 camel: namespace 前缀,您可以省略 inline 命名空间声明:
<camel:camelContext id="camel5"> <camel:package>org.apache.camel.spring.example</camel:package> </camel:camelContext>
318.2.2. 使用 Spring 的高级配置
有关使用 Spring 的 CamelContext 高级配置的更多详细信息
$$ $ 使用 Java Code
您可以使用 Java Code 定义 RouteBuilder 实施。它们可以在 spring 中定义为 Bean,然后在 camel 上下文中引用,例如:
318.2.3. 使用 <package>
Camel 还提供强大的功能,允许在给定软件包中自动发现和初始化路由。这可以通过在 spring 上下文定义中的 camel 上下文中添加标签,指定要递归搜索 RouteBuilder 实施的软件包。要在 1.X 中使用这个功能,需要一个 <package></package> 标签,指定应该搜索的、以逗号分隔的软件包列表。
<camelContext xmlns="http://camel.apache.org/schema/spring"> <package>org.apache.camel.spring.config.scan.route</package> </camelContext>
警告:在将软件包名称指定为 org.apache.camel
或这个子软件包时,请小心。这会导致 Camel 在自己的软件包中搜索您的路由,这可能会导致问题。
INFO:* 将忽略已实例化的类*。<package> 和 <packageScan> 将跳过已经由 Spring 等创建的任何类。因此,如果您将路由构建器定义为 spring bean 标签,则会跳过该类。您可以使用 < routeBuilder ref="theBeanId"/> 或 <
contextScan> 功能包含这些
Bean。
318.2.4. 使用 <packageScan>
在 Camel 2.0 中,它已扩展,允许使用 Ant 等发现的路由类进行选择和排除。在 spring 中,这通过添加 <packageScan/> 标签来指定。标签必须包含一个或多个 'package' 元素(与 1.x 类似),以及一个或多个 'includes' 或 'excludes' 元素指定要应用到所发现类的完全限定域名。例如:
<camelContext xmlns="http://camel.apache.org/schema/spring"> <packageScan> <package>org.example.routes</package> <excludes>**.*Excluded*</excludes> <includes>**.*</includes> </packageScan> </camelContext>
在包含模式前应用 exclude 模式。如果没有定义包含或排除模式,则返回软件包中发现的所有 Route 类。
在上例中,camel 将扫描所有 'org.example.routes' 软件包以及 RouteBuilder 类的任何子软件包。如果扫描发现两个 RouteBuilders,一个位于 org.example.routes,名为"MyRoute",另一个位于子软件包"excluded"中的"MyExcludedRoute"。每个类的完全限定名称都会被提取(org.example.routes.MyRoute, org.example.routes.excluded.MyExcludedRoute),并应用 include 和 exclude 模式。
排除模式 * RoleExcluded 将与 fqcn 'org.example.routes.excluded.MyExcludedRoute' 和 veto camel 在初始化时匹配。
在覆盖范围内,这使用 Spring 的 AntPatternMatcher 实现,其匹配如下
? matches one character * matches zero or more characters ** matches zero or more segments of a fully qualified name
例如:
*adtrustexcluded 将与 org.simple.Excluded, org.apache.camel.SomeExcludedRoute 或 org.example.RouteWhichIsExcluded 匹配
If??cluded 将匹配 org.simple.IncludedRoute, org.simple.Excluded 而不是与 org.simple.PrecludedRoute 匹配
318.2.5. 使用 contextScan
从 Camel 2.4 开始提供
您可以允许 Camel 扫描容器上下文,例如用于路由构建器实例的 Spring ApplicationContext
。这允许您使用 Spring < component-scan&
gt; 功能,并让 Camel 在扫描过程中选择由 Spring 创建的任何 RouteBuilder 实例。
这可让您使用 Spring @Component
注解路由,并包含这些路由。
@Component public class MyRoute extends SpringRouteBuilder { @Override public void configure() throws Exception { from("direct:start").to("mock:result"); } }
您还可以使用 ANT 样式包含和排除,如 < packageScan>
; 文档中所述。