2016-01-27 120 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。這應該是獲取動態完成文件名的一種方法。 –