第 16 章 文件语言
摘要
文件语言是简单语言的扩展,而不是自己右侧的独立语言。但是,文件语言扩展只能与 File 或 FTP 端点一起使用。
16.1. 何时使用 file 语言
概述
文件语言是无法始终可用的简单语言的扩展。在以下情况下可以使用它:
文件语言无法使用转义字符 \
。
在文件或 FTP 消费者端点中
您可以在 File 或 FTP 使用者端点上设置多个 URI 选项,这些选项使用文件语言表达式作为其值。例如,在文件消费者端点 URI 中,您可以使用文件表达式设置 fileName
、move
、preMove
、preMove、moveFailed
和 sortBy
选项。
在 File consumer 端点中,fileName
选项充当过滤器,确定哪个文件实际上将从起始目录中读取。如果指定了纯文本字符串(例如 fileName=report.txt
),则文件消费者每次更新时都会读取同一文件。但是,您可以通过指定一个简单的表达式使此选项更加动态。例如,当 File consumer 轮询起始目录时,您可以使用计数器 Bean 来选择不同的文件,如下所示:
file://target/filelanguage/bean/?fileName=${bean:counter.next}.txt&delete=true
其中 ${bean:
表达式调用 ID 下注册的 bean 的 counter
.next}next ()
方法。
move
选项用于在文件消费者端点读取后将文件移到备份位置。例如,以下端点会在处理后将文件移到备份目录中:
file://target/filelanguage/?move=backup/${date:now:yyyyMMdd}/${file:name.noext}.bak&recursive=false
其中 ${file:name.noext}.bak
表达式会修改原始文件名,将文件扩展名替换为 .bak
。
您可以使用 sortBy
选项指定应处理文件的顺序。例如,要根据文件名的字母顺序处理文件,您可以使用以下 File consumer 端点:
file://target/filelanguage/?sortBy=file:name
要根据上次修改的顺序处理文件,您可以使用以下 File consumer 端点:
file://target/filelanguage/?sortBy=file:modified
您可以通过添加 reverse:
prefix to to the order 来撤销顺序,例如:
file://target/filelanguage/?sortBy=reverse:file:modified
在由文件或 FTP 使用者创建的交换时
当交换源自文件或 FTP 消费者端点时,可以将文件语言表达式应用到整个路由中的交换(只要原始消息标头没有被清除)。例如,您可以定义一个基于内容的路由器,根据其文件扩展路由消息,如下所示:
<from uri="file://input/orders"/> <choice> <when> <simple>${file:ext} == 'txt'</simple> <to uri="bean:orderService?method=handleTextFiles"/> </when> <when> <simple>${file:ext} == 'xml'</simple> <to uri="bean:orderService?method=handleXmlFiles"/> </when> <otherwise> <to uri="bean:orderService?method=handleOtherFiles"/> </otherwise> </choice>