Java Camel RouteBuilder在复制完成之前选择文件

时间:2016-01-25 16:58:35

标签: java apache-camel

我正在使用Ubuntu(如果它会有所作为)我正在尝试使用Camel从一个文件夹向处理器发送文件。但问题是,当我将此文件保存在文件夹中时(大约需要5-10秒),Camel立即将其拾取。 为了模拟这个过程,我使用带有~500k行的txt文件的gedit,因此需要一些时间来保存。

我尝试过添加选项:

from("file:src/Data/new/?readLock=changed&readLockMinAge=3m")

我尝试过使用过 .filter(header("CamelFileLastModified").isGreaterThan(new Date(System.currentTimeMillis()-120000)))延迟2分钟。

似乎没有什么影响它的行为,它会立即拾取它,因为在处理文件时将一些检查移动到Error文件夹而引发异常。

我知道FTP文件传输存在问题,我稍后将不得不面对,但我甚至无法在本地文件系统上运行。

任何帮助将不胜感激!

解决

from("file:src/Data/new/?readLock=changed&readLockMinAge=3m")

参数实际上可以正常工作。我正在使用Jetty来运行项目,我应该在任何修改后完成整个项目的清理/安装。

我不得不将参数修改为:

from("file:src/Data/new/?readLock=changed&readLockTimeout=65000&readLockMinAge=1m")

因为它抱怨readLockTimeout应该超过readLockCheckInterval + readLockMinAge。

1 个答案:

答案 0 :(得分:2)

查看documentation

  

避免读取当前由其他应用程序写入的文件   注意JDK File IO API在检测是否有点受限   另一个应用程序正在写入/复制文件。而且   实现可以根据OS平台而有所不同。这个   可能导致Camel认为该文件未被其他人锁定   处理并开始消费它。因此,你必须拥有自己   调查你的环境套房。帮助这个骆驼   提供不同的readLock选项和doneFileName选项   可以使用。另请参阅从文件夹中使用文件部分   其他人直接删除文件。

所以我认为doneFileName选项可以解决您的问题。