37.28. 使用 ANT 路径匹配器进行过滤
ANT 路径匹配器基于 AntPathMatcher。
文件路径与以下规则匹配:
-
?匹配一个字符 -
*匹配零个或多个字符 -
**匹配路径中的零个或多个目录
antInclude 和 antExclude 选项可让您轻松指定 ANT 风格 include/exclude,而无需定义过滤器。如需更多信息,请参阅上面的 URI 选项。以下示例演示了如何使用它。
当将 minDepth/maxDepth 与 recursive=true 组合结合使用时,tExclude=… 和 readLockDeleteOrphanLockFiles=true 会导致扫描所有文件/subfolders 深度,超过 maxDepth 中提到的值。解决办法是配置 readLockDeleteOrphanLockFiles=false。
37.28.1. 使用比较器排序 复制链接链接已复制到粘贴板!
Camel 支持可插拔排序策略。这可确保它在 Java 中的 java.util.Comparator 中使用构建。然后,您可以使用这样的比较器配置端点,并在处理前让 Camel 排序文件。
在示例中,我们构建了自己的比较器,仅按文件名排序:
然后,我们可以使用 sorter 选项配置路由以引用我们的排序器(我的Sorter)在 spring XML 文件中定义:
<!-- 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=stepsmySorter 将指示 Camel 在 Registry 中查找 ID 为 mySorter 的 bean。
37.28.2. 使用 sortBy 排序 复制链接链接已复制到粘贴板!
Camel 支持可插拔排序策略。此策略使用 File 语言来配置排序。sortBy 选项配置如下:
sortBy=group 1;group 2;group 3;...
其中每个组用分号分隔。在简单情况下,您只需要使用一个组,因此一个简单的示例可以是:
sortBy=file:name
这将按文件名排序,您可以通过为组反反对顺序 相反,从而使排序现在为 Z..A:
sortBy=reverse:file:name
我们拥有 文件 语言的完整功能,我们可以使用其他一些参数,因此如果我们希望按文件大小排序:
sortBy=file:length
您可以将 配置为忽略大小写,使用 ignoreCase: 进行字符串比较,因此如果您想要使用文件名排序,但忽略大小写,然后我们做:
sortBy=ignoreCase:file:name
您可以组合忽略的大小写和反向,但必须首先指定 reverse :
sortBy=reverse:ignoreCase:file:name
在以下示例中,我们希望按上次修改的文件排序,因此我们这样做:
sortBy=file:modified
然后,我们希望根据名称对第 2 个选项进行分组,以便具有相同 modifcation 的文件按名称排序:
sortBy=file:modified;file:name
现在,这里有一个问题,您可以发现它吗?文件修改的时间戳在毫秒内过于正常,但如果我们只想按日期排序,然后按名称对子组进行排序会怎样?
我们拥有 文件 语言的真正能力,我们可以使用支持模式的 date 命令。这可以通过以下方式解决:
sortBy=date:file:yyyyMMdd;file:name
是的,它非常强大,您可以采用按组反向使用的方式 oh,因此我们可以撤销文件名:
sortBy=date:file:yyyyMMdd;reverse:file:name