Apache camel ApacheCamel-doneFileName的工作原理
source_dir有如下文件:ABC_0202018_162301.CSV、ABC_0202018_231801.CSV、controlFileApache camel ApacheCamel-doneFileName的工作原理,apache-camel,Apache Camel,source_dir有如下文件:ABC_0202018_162301.CSV、ABC_0202018_231801.CSV、controlFile <route id="Test"> <from uri="file:source_dir?include=ABC_.*\.CSV&doneFileName=controlFile&delete=true&readLock=changed&readLockTimeou
<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>
**目标目录**
我在这里看的是,路由必须检查每个主文件的控制文件。若任何主文件并没有控制文件,则主文件不应从源文件夹中移动
在我上面的代码中,camel只检查一次源文件夹中是否存在控制文件,并将所有文件移动到目标文件夹。是否有人可以在这方面提供帮助?根据(使用“完成”文件)一节,为了每个主文件有一个doneFile,您需要指定动态doneFile名称:
更常见的是,每个目标文件有一个完成的文件。这意味着
存在1:1的相关性。要做到这一点,必须使用dynamic
doneFileName选项中的占位符。目前,Camel支持
以下两个动态标记:file:name和file:name.noext,它们必须
包含在${}中
如果不这样做,则Camel将使用所有文件,然后删除doneFile,除非
noop=true
简短回答:如果动态定义doneFileName,如“doneFileName=${file:name.noext}.trig”,则要传输的每个文件都必须有一个扩展名为.trig的副本。
如果静态定义doneFileName,如“doneFileName=files.trig”,则当files.trig出现时,将移动每个文件
因此,您必须为每个文件考虑一个唯一的doneFileName,而不是“controlFile”,并动态设置它。最简单的方法是使用实际的文件名并添加一些扩展名
示例:
想象一下这些文件:file1.txt,file2.txt这条路线是从:
from("ftp://admin@localhost/from?password=admin"
+ "&fileName=${file:name}"
+ "&doneFileName=${file:name.noext}.done")
在这种情况下,仅当file1.done也存在于同一文件夹中时,才会移动file1.txt。仅当同一文件夹中还存在file2.done时,才会移动file2.txt
现在想象一下这条路线:
from("ftp://admin@localhost/from?password=admin"
+ "&fileName=${file:name}"
+ "&doneFileName=controlFile");
在这种情况下,当files.done文件位于同一文件夹中时,file1.txt和file2.txt两个文件都将被移动。谢谢您的时间。我同意你的看法,但doneFileName的静态名称在Windows操作系统中工作。这就是我感到困惑的地方,为什么它不能在UNIX操作系统中工作。