Apache camel ApacheCamel-doneFileName的工作原理

Apache 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&amp;doneFileName=controlFile&amp;delete=true&amp;readLock=changed&amp;readLockTimeou

source_dir有如下文件:ABC_0202018_162301.CSV、ABC_0202018_231801.CSV、controlFile

<route id="Test">
  <from uri="file:source_dir?include=ABC_.*\.CSV&amp;doneFileName=controlFile&amp;delete=true&amp;readLock=changed&amp;readLockTimeout=20000&amp;readLockCheckInterval=5000&amp;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操作系统中工作。