2016-01-27 92 views
0

我刚开始看apache骆驼(使用蓝图路线),我已经卡住了。我需要处理一组不同格式的csv文件。我用foo_X_20160110.csv得到了5个文件,其中X指定了csv文件的类型,并且这些文件有一个日期标记。这些文件可能非常大,因此一旦写入所有文件,就会写入“完成”文件。完成的文件名为foo_trigger_20160110.csv。带有doneFileName的Apache骆驼文件

我已经看到文件上的doneFileName选项,但只支持静态名称(我在文件名中有一个日期),或者它期望每个输入文件都有一个完成的文件。

文件必须以固定顺序进行处理,但不能保证它们以何种顺序写入输入目录。因此我需要等待完成的文件。

任何想法如何与骆驼这可以做?

对于好的骆驼书有什么建议吗?

+0

嗨,那些曾经在几个问题。你能详细说明你后面的问题吗?至于书籍,你应该从骆驼在行动这是主要的书,然后还有骆驼食谱。 –

+0

感谢您的书籍​​推荐。主要问题在于如何配置文件URI以使用非静态完成的文件,并且只在处理0字节完成文件(根据日期更改名称)时才处理目录中的其他文件 – Ben

回答

2

下面是一个例子从文档 http://camel.apache.org/file2.html

from("file:C:/temp/input.txt?doneFileName=done"); 

正如你可以看到doneFileName有一个静态值“完成”。但是您可以使用标准的java来编写动态名称,即用于当前dateformat或其他任何内容,只需使用字符串操作来构造URI即可。希望有所帮助。

更新:

顺便说一句,如文档中提到的没有为doneFileName动态占位符的选项。

但是,更常见的是每个目标文件都有一个完成的文件。这个 意味着有1:1的相关性。为此,您必须在doneFileName选项中使用动态 占位符。目前骆驼支持 下面的两个动态令牌:文件:名称和文件:name.noext必须 包含在$ {}中。消费者仅支持将 完成的文件名的静态部分作为前缀或后缀(不是两者)。

from("file:bar?doneFileName=${file:name}.done"); 

你也可以使用一个前缀为完成文件,如:

from("file:bar?doneFileName=ready-${file:name}"); 
+0

谢谢,can您将展开如何调用Java以从文件URI创建动态名称?对不起还早。骆驼在行动书明天到达 – Ben

+0

我想一个选择是使用GenericFileProcessStrategy自定义processStrategy? – Ben

+0

我不认为你需要这个。对于标准的java我的意思是,如果done文件的名称为“currentdate”.txt,其中currentdate是今天的日期。然后,您只需使用标准Java并将其连接起来即可创建URI。这应该是获取动态完成文件名的一种方法。 –