source_dir有以下文件: ABC_02022018_162301.CSV、ABC_02022018_231801.CSV、controlFile
<route id="Test">
<from uri="file:source_dir?include=ABC_.*\.CSV&doneFileName=controlFile&delete=true&readLock=changed&readLockTimeout=20000&readLockCheckInterval=5000&eadLockMinLength=0"/>
<log message="${file:name}"/>
**destination directory **
</route>我在这里寻找的是,路由必须检查controlFile的每一个主要文件。如果任何主文件没有控制文件,主文件不应该从源文件夹中移动。
在我上面的代码中,camel只检查一次源文件夹中是否存在控制文件,并将所有文件移动到目标文件夹。有人能帮忙吗?
发布于 2018-02-05 15:03:08
根据骆驼医生 (“使用'done‘Files”一节),为了使每个主文件有一个doneFile,您需要指定动态doneFile名称:
更常见的情况是,每个目标文件都有一个完成文件。这意味着有1:1的相关性。要做到这一点,您必须在doneFileName选项中使用动态占位符。目前,Camel支持以下两个动态令牌: file:name和file:name.noext,它们必须包含在${}中
如果没有,那么Camel将消耗所有文件,然后删除doneFile,除非是noop=true
发布于 2018-02-14 15:24:21
简单回答:如果您像这样动态地定义doneFileName "doneFileName=${file:name.noext} .trig“,那么要传输的每个文件都必须有一个具有.trig扩展名的副本。如果您像“doneFileName”一样静态地定义doneFileName=files.trig,那么当files.trig出现时,每个文件都会被移动。
因此,您必须为每个文件考虑一个唯一的doneFileName,而不是"controlFile“,并动态地设置它。最简单的方法是使用实际的fileName并添加一些扩展。
示例:
假设以下文件: file1.txt,file2.txt
这条路线来自:
from("ftp://admin@localhost/from?password=admin"
+ "&fileName=${file:name}"
+ "&doneFileName=${file:name.noext}.done")在本例中,file1.txt只有在file1.do也出现在同一个文件夹中时才会被移动。只有当file2.do也出现在同一个文件夹中时,file2.txt才会被移动。
现在想象一下这条路线:
from("ftp://admin@localhost/from?password=admin"
+ "&fileName=${file:name}"
+ "&doneFileName=controlFile");在本例中,当files.done文件位于同一个文件夹中时,两个文件file1.txt和file2.txt都将被移动。
https://stackoverflow.com/questions/48625208
复制相似问题