24.27. 使用 ANT 路径匹配程序进行过滤
ANT 路径匹配程序基于 AntPathMatcher。
文件路径与以下规则匹配:
-
?
匹配一个字符 -
DNAT
匹配零个或多个字符 -
Tailoring
匹配路径中的零个或多个目录
antInclude
和 antExclude
选项可以轻松地指定 ANT 风格的 include/exclude,而无需定义过滤器。如需更多信息,请参阅上面的 URI 选项。
以下示例演示了如何使用它:
24.27.1. 使用 Comparator 进行排序
Camel 支持可插拔排序策略。此策略在 Java 中的 java.util.Comparator
中使用构建。然后,您可以使用这样的比较器配置端点,并在处理前对文件进行排序。
在示例中,我们构建了自己的比较器,只需按照文件名排序:
然后,我们可以使用 sorter 选项配置路由,以引用我们在 spring XML 文件中定义的排序器(mySorter
):
<!-- define our sorter as a plain spring bean --> <bean id="mySorter" class="com.mycompany.MyFileSorter"/> <route> <from uri="file://inbox?sorter=#mySorter"/> <to uri="bean:processInbox"/> </route>
URI 选项可以使用 # 语法来引用 bean
在 Spring DSL 路由中,可以通过在 id 前使用 # 前缀来引用 Registry 中的 beans。因此,编写 sorter=114mySorter
将指示 Camel 在 Registry 中查找 ID 为 mySorter
的 bean。
24.27.2. 使用 sortBy 排序
Camel 支持可插拔排序策略。此策略使用 文件 语言来配置排序。sortBy
选项配置如下:
sortBy=group 1;group 2;group 3;...
其中,每个组都用分号分开。在简单的情形中,您只使用一个组,因此一个简单的示例可以是:
sortBy=file:name
这将根据文件名排序,您可以通过前缀 reverseing reverse:
到组来撤销顺序,因此排序现在是 Z..A :
sortBy=reverse:file:name
因为我们拥有完整的 文件 语言功能,我们可以使用一些额外的参数,因此如果我们希望根据文件大小排序:
sortBy=file:length
您可以将配置为忽略问题单,使用 ignoreCase:
进行字符串比较,因此如果您想要使用文件排序但忽略这种情况,则我们这样做:
sortBy=ignoreCase:file:name
您可以组合忽略问题单和反向,但必须首先指定反向:
sortBy=reverse:ignoreCase:file:name
在以下示例中,我们希望按上次修改的文件排序,因此我们这样做:
sortBy=file:modified
然后,我们希望将名称作为 2 个选项进行分组,以便具有相同修改的文件按照名称排序:
sortBy=file:modified;file:name
现在,此处存在一个问题,您可以发现它吗?对文件的修改的时间戳太正常,但如果我们只想根据日期排序,那么根据名称对子组进行排序,那么什么?
另外,我们拥有 文件语言的真实 功能,我们还可以使用其支持模式的 date 命令。因此,您可以通过以下方法解决:
sortBy=date:file:yyyyMMdd;file:name
Yeah 是非常强大的,根据您还可为每个组使用反向方式,因此我们可以撤销文件名:
sortBy=date:file:yyyyMMdd;reverse:file:name