我有一个客户将文件通过 ftp 传输到我们的服务器。我定义了一个路由来从该目录中选择某些文件并将它们移动到要处理的不同目录。问题是它一看到它就接受它,而不是等到 ftp 完成。结果是 to uri 中描述的路径中的 0 字节文件。我已经尝试了每个 readLock 选项(masterFile、rename、changed、fileLock),但都没有奏效。我正在使用 spring DSL 来定义我的骆驼路线。这是一个不工作的例子。骆驼版本是 2.10.0
<route>
<from uri="file:pathName?initialDelay=10s&move=ARCHIVE&sortBy=ignoreCase:file:name&readLock=fileLock&readLockCheckInterval=5000&readLockTimeout=10m&filter=#FileFilter" />
<to uri="file:pathName/newDirectory/" />
</route>
任何帮助,将不胜感激。谢谢!
只是要注意......有一次,这条路线在另一台服务器上运行,我不得不将文件 ftp 到另一台处理它的服务器。当我在骆驼中使用 ftp 组件时,该路由运行良好。也就是说,它确实等到收到文件后才执行 ftp。我在定义的路线上有相同的选项。这就是为什么我认为应该有办法做到这一点,因为 ftp 组件使用骆驼中的文件组件选项。
我正在接受@PeteH 的建议 #2 并做了以下事情。我仍然希望有另一种方法,但这会奏效。
我添加了以下方法,该方法返回一个日期为 current.minus(x seconds)
public static Date getDateMinusSeconds(Integer seconds) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, seconds);
return cal.getTime();
}
然后在我的过滤器中检查初始过滤是否为真。如果是,我将上次修改日期与 getDateMinusSeconds() 进行比较。如果比较为真,我为过滤器返回假。
if(filter){
if(new Date(pathname.getLastModified()).after(DateUtil.getDateMinusSeconds(-30))){
return false;
}
}