23.5. 移动和删除操作
任何移动或删除操作都会在(post 命令)完成后执行;因此在处理 交换
过程中,该文件仍然位于 inbox 文件夹中。
通过一个示例来演示这一点:
from("file://inbox?move=.done").to("bean:handleOrder");
from("file://inbox?move=.done").to("bean:handleOrder");
当文件在 inbox
文件夹中丢弃时,文件消费者会注意到这一点,并创建一个新的 FileExchange
,它路由到 handleOrder
bean。然后 bean 处理 File
对象。此时,该文件仍然位于 inbox
文件夹中。在 bean 完成后,路由完成后,文件消费者将执行 move 操作,并将文件移到 .done
子文件夹。
move 和 preMove 选项被视为目录名称(但是,如果您使用一个表达式(如 文件 语言)或 Simple,则表达式评估的结果是要使用的文件名。例如,如果设置了:
move=../backup/copy-of-${file:name}
move=../backup/copy-of-${file:name}
然后,使用的文件语言返回要使用的文件名,可以是相对或绝对的。https://access.redhat.com/documentation/zh-cn/red_hat_integration/2023.q2/html-single/camel_spring_boot_reference_guide_3.18/index#csb-camel-file-language-starter如果相对,则该目录创建为使用该文件的文件夹的子文件夹。
默认情况下,Camel 会将消耗的文件移到相对于文件消耗的目录的 .camel
子文件夹。
如果要在处理后删除该文件,路由应该是:
from("file://inbox?delete=true").to("bean:handleOrder");
from("file://inbox?delete=true").to("bean:handleOrder");
在处理文件 前,我们引入了一个 预 移动操作来移动文件。这可让您在处理前标记哪些文件被扫描,因为这些文件将移到这个子文件夹中。
from("file://inbox?preMove=inprogress").to("bean:handleOrder");
from("file://inbox?preMove=inprogress").to("bean:handleOrder");
您可以组合 预 移动和常规移动:
from("file://inbox?preMove=inprogress&move=.done").to("bean:handleOrder");
from("file://inbox?preMove=inprogress&move=.done").to("bean:handleOrder");
因此,在这种情况下,文件在处理时位于 inprogress
文件夹中,并在处理后移至 .done
文件夹。